a636ef2933cca9de4be45e0a434f62c970d9882e
[mono.git] / mono / metadata / tabledefs.h
1 /*
2  * tabledefs.h: This file contains the various definitions for constants
3  * found on the metadata tables
4  *
5  * Author:
6  *   Miguel de Icaza (miguel@ximian.com)
7  *
8  * (C) 2001 Ximian, Inc.
9  *
10  * From the ECMA documentation
11  */
12  
13 #ifndef _MONO_METADATA_TABLEDEFS_H_
14 #define _MONO_METADATA_TABLEDEFS_H_
15
16
17 /*
18  * Field Attributes (21.1.5).
19  */
20
21 #define FIELD_ATTRIBUTE_FIELD_ACCESS_MASK     0x0007
22 #define FIELD_ATTRIBUTE_COMPILER_CONTROLLED   0x0000
23 #define FIELD_ATTRIBUTE_PRIVATE               0x0001
24 #define FIELD_ATTRIBUTE_FAM_AND_ASSEM         0x0002
25 #define FIELD_ATTRIBUTE_ASSEMBLY              0x0003
26 #define FIELD_ATTRIBUTE_FAMILY                0x0004
27 #define FIELD_ATTRIBUTE_FAM_OR_ASSEM          0x0005
28 #define FIELD_ATTRIBUTE_PUBLIC                0x0006
29
30 #define FIELD_ATTRIBUTE_STATIC                0x0010
31 #define FIELD_ATTRIBUTE_INIT_ONLY             0x0020
32 #define FIELD_ATTRIBUTE_LITERAL               0x0040
33 #define FIELD_ATTRIBUTE_NOT_SERIALIZED        0x0080
34 #define FIELD_ATTRIBUTE_SPECIAL_NAME          0x0200
35 #define FIELD_ATTRIBUTE_PINVOKE_IMPL          0x2000
36
37 /* For runtime use only */
38 #define FIELD_ATTRIBUTE_RESERVED_MASK         0x9500
39 #define FIELD_ATTRIBUTE_RT_SPECIAL_NAME       0x0400
40 #define FIELD_ATTRIBUTE_HAS_FIELD_MARSHAL     0x1000
41 #define FIELD_ATTRIBUTE_HAS_DEFAULT           0x8000
42 #define FIELD_ATTRIBUTE_HAS_FIELD_RVA         0x0100
43
44 /*
45  * Type Attributes (21.1.13).
46  */
47 #define TYPE_ATTRIBUTE_VISIBILITY_MASK       0x00000007
48 #define TYPE_ATTRIBUTE_NOT_PUBLIC            0x00000000
49 #define TYPE_ATTRIBUTE_PUBLIC                0x00000001
50 #define TYPE_ATTRIBUTE_NESTED_PUBLIC         0x00000002
51 #define TYPE_ATTRIBUTE_NESTED_PRIVATE        0x00000003
52 #define TYPE_ATTRIBUTE_NESTED_FAMILY         0x00000004
53 #define TYPE_ATTRIBUTE_NESTED_ASSEMBLY       0x00000005
54 #define TYPE_ATTRIBUTE_NESTED_FAM_AND_ASSEM  0x00000006
55 #define TYPE_ATTRIBUTE_NESTED_FAM_OR_ASSEM   0x00000007
56
57 #define TYPE_ATTRIBUTE_LAYOUT_MASK           0x00000018
58 #define TYPE_ATTRIBUTE_AUTO_LAYOUT           0x00000000
59 #define TYPE_ATTRIBUTE_SEQUENTIAL_LAYOUT     0x00000008
60 #define TYPE_ATTRIBUTE_EXPLICIT_LAYOUT       0x00000010
61
62 #define TYPE_ATTRIBUTE_CLASS_SEMANTIC_MASK   0x00000020
63 #define TYPE_ATTRIBUTE_CLASS                 0x00000000
64 #define TYPE_ATTRIBUTE_INTERFACE             0x00000020
65
66 #define TYPE_ATTRIBUTE_ABSTRACT              0x00000080
67 #define TYPE_ATTRIBUTE_SEALED                0x00000100
68 #define TYPE_ATTRIBUTE_SPECIAL_NAME          0x00000400
69
70 #define TYPE_ATTRIBUTE_IMPORT                0x00001000
71 #define TYPE_ATTRIBUTE_SERIALIZABLE          0x00002000
72
73 #define TYPE_ATTRIBUTE_STRING_FORMAT_MASK    0x00030000
74 #define TYPE_ATTRIBUTE_ANSI_CLASS            0x00000000
75 #define TYPE_ATTRIBUTE_UNICODE_CLASS         0x00010000
76 #define TYPE_ATTRIBUTE_AUTO_CLASS            0x00020000
77
78 #define TYPE_ATTRIBUTE_BEFORE_FIELD_INIT     0x00100000
79
80 #define TYPE_ATTRIBUTE_RESERVED_MASK         0x00040800
81 #define TYPE_ATTRIBUTE_RT_SPECIAL_NAME       0x00000800
82 #define TYPE_ATTRIBUTE_HAS_SECURITY          0x00040000
83
84 /*
85  * Method Attributes (22.1.9)
86  */
87
88 #define METHOD_IMPL_ATTRIBUTE_CODE_TYPE_MASK       0x0003
89 #define METHOD_IMPL_ATTRIBUTE_IL                   0x0000
90 #define METHOD_IMPL_ATTRIBUTE_NATIVE               0x0001
91 #define METHOD_IMPL_ATTRIBUTE_OPTIL                0x0002
92 #define METHOD_IMPL_ATTRIBUTE_RUNTIME              0x0003
93
94 #define METHOD_IMPL_ATTRIBUTE_MANAGED_MASK         0x0004
95 #define METHOD_IMPL_ATTRIBUTE_UNMANAGED            0x0004
96 #define METHOD_IMPL_ATTRIBUTE_MANAGED              0x0000
97
98 #define METHOD_IMPL_ATTRIBUTE_FORWARD_REF          0x0010
99 #define METHOD_IMPL_ATTRIBUTE_PRESERVE_SIG         0x0080
100 #define METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL        0x1000
101 #define METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED         0x0020
102 #define METHOD_IMPL_ATTRIBUTE_NOINLINING           0x0008
103 #define METHOD_IMPL_ATTRIBUTE_MAX_METHOD_IMPL_VAL  0xffff
104
105 #define METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK        0x0007
106 #define METHOD_ATTRIBUTE_COMPILER_CONTROLLED       0x0000
107 #define METHOD_ATTRIBUTE_PRIVATE                   0x0001
108 #define METHOD_ATTRIBUTE_FAM_AND_ASSEM             0x0002
109 #define METHOD_ATTRIBUTE_ASSEM                     0x0003
110 #define METHOD_ATTRIBUTE_FAMILY                    0x0004
111 #define METHOD_ATTRIBUTE_FAM_OR_ASSEM              0x0005
112 #define METHOD_ATTRIBUTE_PUBLIC                    0x0006
113
114 #define METHOD_ATTRIBUTE_STATIC                    0x0010
115 #define METHOD_ATTRIBUTE_FINAL                     0x0020
116 #define METHOD_ATTRIBUTE_VIRTUAL                   0x0040
117 #define METHOD_ATTRIBUTE_HIDE_BY_SIG               0x0080
118
119 #define METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK        0x0100
120 #define METHOD_ATTRIBUTE_REUSE_SLOT                0x0000
121 #define METHOD_ATTRIBUTE_NEW_SLOT                  0x0100
122
123 #define METHOD_ATTRIBUTE_ABSTRACT                  0x0400
124 #define METHOD_ATTRIBUTE_SPECIAL_NAME              0x0800
125
126 #define METHOD_ATTRIBUTE_PINVOKE_IMPL              0x2000
127 #define METHOD_ATTRIBUTE_UNMANAGED_EXPORT          0x0008
128
129 /*
130  * For runtime use only
131  */
132 #define METHOD_ATTRIBUTE_RESERVED_MASK             0xd000
133 #define METHOD_ATTRIBUTE_RT_SPECIAL_NAME           0x1000
134 #define METHOD_ATTRIBUTE_HAS_SECURITY              0x4000
135 #define METHOD_ATTRIBUTE_REQUIRE_SEC_OBJECT        0x8000
136
137
138 /*
139  * Method Semantics ([MethodSemanticAttributes]) 22.1.10
140  */
141
142 #define METHOD_SEMANTIC_SETTER    0x0001
143 #define METHOD_SEMANTIC_GETTER    0x0002
144 #define METHOD_SEMANTIC_OTHER     0x0004
145 #define METHOD_SEMANTIC_ADD_ON    0x0008
146 #define METHOD_SEMANTIC_REMOVE_ON 0x0010
147 #define METHOD_SEMANTIC_FIRE      0x0020
148
149 /*
150  * Flags for Params (22.1.11)
151  */
152 #define PARAM_ATTRIBUTE_IN                 0x0001
153 #define PARAM_ATTRIBUTE_OUT                0x0002
154 #define PARAM_ATTRIBUTE_OPTIONAL           0x0004
155 #define PARAM_ATTRIBUTE_RESERVED_MASK      0xf000
156 #define PARAM_ATTRIBUTE_HAS_DEFAULT        0x1000
157 #define PARAM_ATTRIBUTE_HAS_FIELD_MARSHAL  0x2000
158 #define PARAM_ATTRIBUTE_UNUSED             0xcfe0
159
160 /*
161  * 22.1.12 PropertyAttributes
162  */
163 #define PROPERTY_ATTRIBUTE_SPECIAL_NAME    0x0200
164 #define PROPERTY_ATTRIBUTE_RESERVED_MASK   0xf400
165 #define PROPERTY_ATTRIBUTE_RT_SPECIAL_NAME 0x0400
166 #define PROPERTY_ATTRIBUTE_HAS_DEFAULT     0x1000
167 #define PROPERTY_ATTRIBUTE_UNUSED          0xe9ff
168
169 #endif