90cb93e050c3f4391107e77567d1c3667d00c5b7
[mono.git] / mono / metadata / tabledefs.h
1 /**
2  * \file
3  * This file contains the various definitions for constants
4  * found on the metadata tables
5  *
6  * Author:
7  *   Miguel de Icaza (miguel@ximian.com)
8  *
9  * (C) 2001 Ximian, Inc.
10  *
11  * From the ECMA documentation
12  */
13  
14 #ifndef _MONO_METADATA_TABLEDEFS_H_
15 #define _MONO_METADATA_TABLEDEFS_H_
16
17 /*
18  * 22.1.1  Values for AssemblyHashAlgorithm 
19  */
20
21 enum {
22         ASSEMBLY_HASH_NONE,
23         ASSEMBLY_HASH_MD5  = 0x8003,
24         ASSEMBLY_HASH_SHA1 = 0x8004
25 };
26
27 /*
28  * 22.1.4 Flags for Event.EventAttributes
29  */
30
31 enum {
32         EVENT_SPECIALNAME   = 0x0200,
33         EVENT_RTSPECIALNAME = 0x0400
34 };
35
36 /*
37  * 22.1.6 Flags for FileAttributes
38  */
39
40 enum {
41         FILE_CONTAINS_METADATA      = 0,
42         FILE_CONTAINS_NO_METADATA   = 1
43 };
44
45 /* keep in synch with System.Security.Permissions.SecurityAction enum 
46    (except for the special non-CAS cases) */
47 enum {
48         SECURITY_ACTION_DEMAND        = 2,
49         SECURITY_ACTION_ASSERT        = 3,
50         SECURITY_ACTION_DENY          = 4,
51         SECURITY_ACTION_PERMITONLY    = 5,
52         SECURITY_ACTION_LINKDEMAND    = 6,
53         SECURITY_ACTION_INHERITDEMAND = 7,
54         SECURITY_ACTION_REQMIN        = 8,
55         SECURITY_ACTION_REQOPT        = 9,
56         SECURITY_ACTION_REQREFUSE     = 10,
57         /* Special cases (non CAS permissions) */
58         SECURITY_ACTION_NONCASDEMAND        = 13,
59         SECURITY_ACTION_NONCASLINKDEMAND    = 14,
60         SECURITY_ACTION_NONCASINHERITANCE   = 15,
61         /* Fx 2.0 actions (for both CAS and non-CAS permissions) */
62         SECURITY_ACTION_LINKDEMANDCHOICE    = 16,
63         SECURITY_ACTION_INHERITDEMANDCHOICE = 17,
64         SECURITY_ACTION_DEMANDCHOICE        = 18
65 };
66
67 /*
68  *
69  * 22.1.8 Flags for ManifestResource
70  */
71 #define MANIFEST_RESOURCE_VISIBILITY_MASK    0x00000007
72 #define MANIFEST_RESOURCE_PUBLIC             0x00000001
73 #define MANIFEST_RESOURCE_PRIVATE            0x00000002
74
75 /*
76  * Field Attributes (21.1.5).
77  */
78
79 #define FIELD_ATTRIBUTE_FIELD_ACCESS_MASK     0x0007
80 #define FIELD_ATTRIBUTE_COMPILER_CONTROLLED   0x0000
81 #define FIELD_ATTRIBUTE_PRIVATE               0x0001
82 #define FIELD_ATTRIBUTE_FAM_AND_ASSEM         0x0002
83 #define FIELD_ATTRIBUTE_ASSEMBLY              0x0003
84 #define FIELD_ATTRIBUTE_FAMILY                0x0004
85 #define FIELD_ATTRIBUTE_FAM_OR_ASSEM          0x0005
86 #define FIELD_ATTRIBUTE_PUBLIC                0x0006
87
88 #define FIELD_ATTRIBUTE_STATIC                0x0010
89 #define FIELD_ATTRIBUTE_INIT_ONLY             0x0020
90 #define FIELD_ATTRIBUTE_LITERAL               0x0040
91 #define FIELD_ATTRIBUTE_NOT_SERIALIZED        0x0080
92 #define FIELD_ATTRIBUTE_SPECIAL_NAME          0x0200
93 #define FIELD_ATTRIBUTE_PINVOKE_IMPL          0x2000
94
95 /* For runtime use only */
96 #define FIELD_ATTRIBUTE_RESERVED_MASK         0x9500
97 #define FIELD_ATTRIBUTE_RT_SPECIAL_NAME       0x0400
98 #define FIELD_ATTRIBUTE_HAS_FIELD_MARSHAL     0x1000
99 #define FIELD_ATTRIBUTE_HAS_DEFAULT           0x8000
100 #define FIELD_ATTRIBUTE_HAS_FIELD_RVA         0x0100
101
102 /*
103  * Type Attributes (21.1.13).
104  */
105 #define TYPE_ATTRIBUTE_VISIBILITY_MASK       0x00000007
106 #define TYPE_ATTRIBUTE_NOT_PUBLIC            0x00000000
107 #define TYPE_ATTRIBUTE_PUBLIC                0x00000001
108 #define TYPE_ATTRIBUTE_NESTED_PUBLIC         0x00000002
109 #define TYPE_ATTRIBUTE_NESTED_PRIVATE        0x00000003
110 #define TYPE_ATTRIBUTE_NESTED_FAMILY         0x00000004
111 #define TYPE_ATTRIBUTE_NESTED_ASSEMBLY       0x00000005
112 #define TYPE_ATTRIBUTE_NESTED_FAM_AND_ASSEM  0x00000006
113 #define TYPE_ATTRIBUTE_NESTED_FAM_OR_ASSEM   0x00000007
114
115 #define TYPE_ATTRIBUTE_LAYOUT_MASK           0x00000018
116 #define TYPE_ATTRIBUTE_AUTO_LAYOUT           0x00000000
117 #define TYPE_ATTRIBUTE_SEQUENTIAL_LAYOUT     0x00000008
118 #define TYPE_ATTRIBUTE_EXPLICIT_LAYOUT       0x00000010
119
120 #define TYPE_ATTRIBUTE_CLASS_SEMANTIC_MASK   0x00000020
121 #define TYPE_ATTRIBUTE_CLASS                 0x00000000
122 #define TYPE_ATTRIBUTE_INTERFACE             0x00000020
123
124 #define TYPE_ATTRIBUTE_ABSTRACT              0x00000080
125 #define TYPE_ATTRIBUTE_SEALED                0x00000100
126 #define TYPE_ATTRIBUTE_SPECIAL_NAME          0x00000400
127
128 #define TYPE_ATTRIBUTE_IMPORT                0x00001000
129 #define TYPE_ATTRIBUTE_SERIALIZABLE          0x00002000
130
131 #define TYPE_ATTRIBUTE_STRING_FORMAT_MASK    0x00030000
132 #define TYPE_ATTRIBUTE_ANSI_CLASS            0x00000000
133 #define TYPE_ATTRIBUTE_UNICODE_CLASS         0x00010000
134 #define TYPE_ATTRIBUTE_AUTO_CLASS            0x00020000
135
136 #define TYPE_ATTRIBUTE_BEFORE_FIELD_INIT     0x00100000
137 #define TYPE_ATTRIBUTE_FORWARDER             0x00200000
138
139 #define TYPE_ATTRIBUTE_RESERVED_MASK         0x00040800
140 #define TYPE_ATTRIBUTE_RT_SPECIAL_NAME       0x00000800
141 #define TYPE_ATTRIBUTE_HAS_SECURITY          0x00040000
142
143 /*
144  * Method Attributes (22.1.9)
145  */
146
147 #define METHOD_IMPL_ATTRIBUTE_CODE_TYPE_MASK       0x0003
148 #define METHOD_IMPL_ATTRIBUTE_IL                   0x0000
149 #define METHOD_IMPL_ATTRIBUTE_NATIVE               0x0001
150 #define METHOD_IMPL_ATTRIBUTE_OPTIL                0x0002
151 #define METHOD_IMPL_ATTRIBUTE_RUNTIME              0x0003
152
153 #define METHOD_IMPL_ATTRIBUTE_MANAGED_MASK         0x0004
154 #define METHOD_IMPL_ATTRIBUTE_UNMANAGED            0x0004
155 #define METHOD_IMPL_ATTRIBUTE_MANAGED              0x0000
156
157 #define METHOD_IMPL_ATTRIBUTE_FORWARD_REF          0x0010
158 #define METHOD_IMPL_ATTRIBUTE_PRESERVE_SIG         0x0080
159 #define METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL        0x1000
160 #define METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED         0x0020
161 #define METHOD_IMPL_ATTRIBUTE_NOINLINING           0x0008
162 #define METHOD_IMPL_ATTRIBUTE_NOOPTIMIZATION       0x0040
163 #define METHOD_IMPL_ATTRIBUTE_MAX_METHOD_IMPL_VAL  0xffff
164 #define METHOD_IMPL_ATTRIBUTE_AGGRESSIVE_INLINING  0x0100
165
166 #define METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK        0x0007
167 #define METHOD_ATTRIBUTE_COMPILER_CONTROLLED       0x0000
168 #define METHOD_ATTRIBUTE_PRIVATE                   0x0001
169 #define METHOD_ATTRIBUTE_FAM_AND_ASSEM             0x0002
170 #define METHOD_ATTRIBUTE_ASSEM                     0x0003
171 #define METHOD_ATTRIBUTE_FAMILY                    0x0004
172 #define METHOD_ATTRIBUTE_FAM_OR_ASSEM              0x0005
173 #define METHOD_ATTRIBUTE_PUBLIC                    0x0006
174
175 #define METHOD_ATTRIBUTE_STATIC                    0x0010
176 #define METHOD_ATTRIBUTE_FINAL                     0x0020
177 #define METHOD_ATTRIBUTE_VIRTUAL                   0x0040
178 #define METHOD_ATTRIBUTE_HIDE_BY_SIG               0x0080
179
180 #define METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK        0x0100
181 #define METHOD_ATTRIBUTE_REUSE_SLOT                0x0000
182 #define METHOD_ATTRIBUTE_NEW_SLOT                  0x0100
183
184 #define METHOD_ATTRIBUTE_STRICT                    0x0200
185 #define METHOD_ATTRIBUTE_ABSTRACT                  0x0400
186 #define METHOD_ATTRIBUTE_SPECIAL_NAME              0x0800
187
188 #define METHOD_ATTRIBUTE_PINVOKE_IMPL              0x2000
189 #define METHOD_ATTRIBUTE_UNMANAGED_EXPORT          0x0008
190
191 /*
192  * For runtime use only
193  */
194 #define METHOD_ATTRIBUTE_RESERVED_MASK             0xd000
195 #define METHOD_ATTRIBUTE_RT_SPECIAL_NAME           0x1000
196 #define METHOD_ATTRIBUTE_HAS_SECURITY              0x4000
197 #define METHOD_ATTRIBUTE_REQUIRE_SEC_OBJECT        0x8000
198
199
200 /*
201  * Method Semantics ([MethodSemanticAttributes]) 22.1.10
202  */
203
204 #define METHOD_SEMANTIC_SETTER    0x0001
205 #define METHOD_SEMANTIC_GETTER    0x0002
206 #define METHOD_SEMANTIC_OTHER     0x0004
207 #define METHOD_SEMANTIC_ADD_ON    0x0008
208 #define METHOD_SEMANTIC_REMOVE_ON 0x0010
209 #define METHOD_SEMANTIC_FIRE      0x0020
210
211 /*
212  * Flags for Params (22.1.12)
213  */
214 #define PARAM_ATTRIBUTE_IN                 0x0001
215 #define PARAM_ATTRIBUTE_OUT                0x0002
216 #define PARAM_ATTRIBUTE_OPTIONAL           0x0010
217 #define PARAM_ATTRIBUTE_RESERVED_MASK      0xf000
218 #define PARAM_ATTRIBUTE_HAS_DEFAULT        0x1000
219 #define PARAM_ATTRIBUTE_HAS_FIELD_MARSHAL  0x2000
220 #define PARAM_ATTRIBUTE_UNUSED             0xcfe0
221
222 /*
223  * 22.1.12 PropertyAttributes
224  */
225 #define PROPERTY_ATTRIBUTE_SPECIAL_NAME    0x0200
226 #define PROPERTY_ATTRIBUTE_RESERVED_MASK   0xf400
227 #define PROPERTY_ATTRIBUTE_RT_SPECIAL_NAME 0x0400
228 #define PROPERTY_ATTRIBUTE_HAS_DEFAULT     0x1000
229 #define PROPERTY_ATTRIBUTE_UNUSED          0xe9ff
230
231 /*
232  * 22.1.7 Flags for ImplMap [PInvokeAttributes]
233  */
234 #define PINVOKE_ATTRIBUTE_NO_MANGLE           0x0001
235 #define PINVOKE_ATTRIBUTE_CHAR_SET_MASK       0x0006
236 #define PINVOKE_ATTRIBUTE_CHAR_SET_NOT_SPEC   0x0000
237 #define PINVOKE_ATTRIBUTE_CHAR_SET_ANSI       0x0002
238 #define PINVOKE_ATTRIBUTE_CHAR_SET_UNICODE    0x0004
239 #define PINVOKE_ATTRIBUTE_CHAR_SET_AUTO       0x0006
240 #define PINVOKE_ATTRIBUTE_BEST_FIT_ENABLED    0x0010
241 #define PINVOKE_ATTRIBUTE_BEST_FIT_DISABLED   0x0020
242 #define PINVOKE_ATTRIBUTE_BEST_FIT_MASK       0x0030
243 #define PINVOKE_ATTRIBUTE_SUPPORTS_LAST_ERROR 0x0040
244 #define PINVOKE_ATTRIBUTE_CALL_CONV_MASK      0x0700
245 #define PINVOKE_ATTRIBUTE_CALL_CONV_WINAPI    0x0100
246 #define PINVOKE_ATTRIBUTE_CALL_CONV_CDECL     0x0200
247 #define PINVOKE_ATTRIBUTE_CALL_CONV_STDCALL   0x0300
248 #define PINVOKE_ATTRIBUTE_CALL_CONV_THISCALL  0x0400
249 #define PINVOKE_ATTRIBUTE_CALL_CONV_FASTCALL  0x0500
250 #define PINVOKE_ATTRIBUTE_THROW_ON_UNMAPPABLE_ENABLED    0x1000
251 #define PINVOKE_ATTRIBUTE_THROW_ON_UNMAPPABLE_DISABLED   0x2000
252 #define PINVOKE_ATTRIBUTE_THROW_ON_UNMAPPABLE_MASK       0x3000
253 #define PINVOKE_ATTRIBUTE_BEST_FIT_MASK       0x0030
254 #define PINVOKE_ATTRIBUTE_CALL_CONV_GENERIC   0x0010
255 #define PINVOKE_ATTRIBUTE_CALL_CONV_GENERICINST 0x000a
256
257 /**
258  * 21.5 AssemblyRefs
259  */
260 #define ASSEMBLYREF_FULL_PUBLIC_KEY_FLAG      0x00000001
261 #define ASSEMBLYREF_RETARGETABLE_FLAG         0x00000100
262 #define ASSEMBLYREF_ENABLEJITCOMPILE_TRACKING_FLAG 0x00008000
263 #define ASSEMBLYREF_DISABLEJITCOMPILE_OPTIMIZER_FLAG 0x00004000
264 #endif