Wed Feb 24 15:47:16 CET 2010 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / attrdefs.h
1 /*
2  * attredefs.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  *   Paolo Molaro (lupus@ximian.com)
8  *
9  * (C) 2001 Ximian, Inc.
10  * (C) 2006 Novell, Inc.
11  *
12  * From the ECMA documentation
13  */
14  
15 #ifndef _MONO_METADATA_ATTRDEFS_H_
16 #define _MONO_METADATA_ATTRDEFS_H_
17
18 /*
19  * 23.1.1  Values for AssemblyHashAlgorithm 
20  */
21 enum {
22         MONO_ASSEMBLY_HASH_NONE,
23         MONO_ASSEMBLY_HASH_MD5  = 0x8003,
24         MONO_ASSEMBLY_HASH_SHA1 = 0x8004
25 };
26
27 /*
28  * 23.1.2 AssemblyRefs
29  */
30 enum {
31         MONO_ASSEMBLYREF_FULL_PUBLIC_KEY = 0x0001,
32         MONO_ASSEMBLYREF_RETARGETABLE    = 0x0100,
33         MONO_ASSEMBLYREF_JIT_TRACKING    = 0x8000,
34         MONO_ASSEMBLYREF_NO_JIT_OPT      = 0x4000
35 };
36
37 /*
38  * 23.1.4 Flags for Event.EventAttributes
39  */
40 enum {
41         MONO_EVENT_SPECIALNAME   = 0x0200,
42         MONO_EVENT_RTSPECIALNAME = 0x0400
43 };
44
45 /*
46  * Field Attributes (23.1.5).
47  */
48 enum {
49         MONO_FIELD_ATTR_FIELD_ACCESS_MASK     = 0x0007,
50         MONO_FIELD_ATTR_COMPILER_CONTROLLED   = 0x0000,
51         MONO_FIELD_ATTR_PRIVATE               = 0x0001,
52         MONO_FIELD_ATTR_FAM_AND_ASSEM         = 0x0002,
53         MONO_FIELD_ATTR_ASSEMBLY              = 0x0003,
54         MONO_FIELD_ATTR_FAMILY                = 0x0004,
55         MONO_FIELD_ATTR_FAM_OR_ASSEM          = 0x0005,
56         MONO_FIELD_ATTR_PUBLIC                = 0x0006,
57
58         MONO_FIELD_ATTR_STATIC                = 0x0010,
59         MONO_FIELD_ATTR_INIT_ONLY             = 0x0020,
60         MONO_FIELD_ATTR_LITERAL               = 0x0040,
61         MONO_FIELD_ATTR_NOT_SERIALIZED        = 0x0080,
62         MONO_FIELD_ATTR_SPECIAL_NAME          = 0x0200,
63         MONO_FIELD_ATTR_PINVOKE_IMPL          = 0x2000,
64
65 /* For runtime use only */
66         MONO_FIELD_ATTR_RESERVED_MASK         = 0x9500,
67         MONO_FIELD_ATTR_RT_SPECIAL_NAME       = 0x0400,
68         MONO_FIELD_ATTR_HAS_MARSHAL           = 0x1000,
69         MONO_FIELD_ATTR_HAS_DEFAULT           = 0x8000,
70         MONO_FIELD_ATTR_HAS_RVA               = 0x0100
71 };
72
73 /*
74  * 23.1.6 Flags for FileAttributes
75  */
76 enum {
77         MONO_FILE_HAS_METADATA      = 0,
78         MONO_FILE_HAS_NO_METADATA   = 1
79 };
80
81 /*
82  * 23.1.7 Flags for generic parameters
83  */
84 enum {
85         MONO_GEN_PARAM_VARIANCE_MASK    = 0x0003,
86         MONO_GEN_PARAM_NON_VARIANT      = 0x0000,
87         MONO_GEN_PARAM_VARIANT          = 0x0001,
88         MONO_GEN_PARAM_COVARIANT        = 0x0002,
89         MONO_GEN_PARAM_CONSTRAINT_MASK  = 0x001c,
90         MONO_GEN_PARAM_CONSTRAINT_CLASS = 0x0004,
91         MONO_GEN_PARAM_CONSTRAINT_VTYPE = 0x0008,
92         MONO_GEN_PARAM_CONSTRAINT_DCTOR = 0x0010
93 };
94
95 /*
96  * 23.1.8 Flags for ImplMap [PInvokeAttributes]
97  */
98 enum {
99         MONO_PINVOKE_NO_MANGLE           = 0x0001,
100         MONO_PINVOKE_CHAR_SET_MASK       = 0x0006,
101         MONO_PINVOKE_CHAR_SET_NOT_SPEC   = 0x0000,
102         MONO_PINVOKE_CHAR_SET_ANSI       = 0x0002,
103         MONO_PINVOKE_CHAR_SET_UNICODE    = 0x0004,
104         MONO_PINVOKE_CHAR_SET_AUTO       = 0x0006,
105         MONO_PINVOKE_BEST_FIT_ENABLED    = 0x0010,
106         MONO_PINVOKE_BEST_FIT_DISABLED   = 0x0020,
107         MONO_PINVOKE_BEST_FIT_MASK       = 0x0030,
108         MONO_PINVOKE_SUPPORTS_LAST_ERROR = 0x0040,
109         MONO_PINVOKE_CALL_CONV_MASK      = 0x0700,
110         MONO_PINVOKE_CALL_CONV_WINAPI    = 0x0100,
111         MONO_PINVOKE_CALL_CONV_CDECL     = 0x0200,
112         MONO_PINVOKE_CALL_CONV_STDCALL   = 0x0300,
113         MONO_PINVOKE_CALL_CONV_THISCALL  = 0x0400,
114         MONO_PINVOKE_CALL_CONV_FASTCALL  = 0x0500,
115         MONO_PINVOKE_THROW_ON_UNMAPPABLE_ENABLED    = 0x1000,
116         MONO_PINVOKE_THROW_ON_UNMAPPABLE_DISABLED   = 0x2000,
117         MONO_PINVOKE_THROW_ON_UNMAPPABLE_MASK       = 0x3000,
118         MONO_PINVOKE_CALL_CONV_GENERIC     = 0x0010,
119         MONO_PINVOKE_CALL_CONV_GENERICINST = 0x000a
120 };
121
122 /*
123  * 23.1.9 Flags for ManifestResource
124  */
125 enum {
126         MONO_MANIFEST_RESOURCE_VISIBILITY_MASK    = 0x00000007,
127         MONO_MANIFEST_RESOURCE_PUBLIC             = 0x00000001,
128         MONO_MANIFEST_RESOURCE_PRIVATE            = 0x00000002
129 };
130
131 /*
132  * Method Attributes (23.1.10)
133  */
134 enum {
135         MONO_METHOD_ATTR_ACCESS_MASK               = 0x0007,
136         MONO_METHOD_ATTR_COMPILER_CONTROLLED       = 0x0000,
137         MONO_METHOD_ATTR_PRIVATE                   = 0x0001,
138         MONO_METHOD_ATTR_FAM_AND_ASSEM             = 0x0002,
139         MONO_METHOD_ATTR_ASSEM                     = 0x0003,
140         MONO_METHOD_ATTR_FAMILY                    = 0x0004,
141         MONO_METHOD_ATTR_FAM_OR_ASSEM              = 0x0005,
142         MONO_METHOD_ATTR_PUBLIC                    = 0x0006,
143
144         MONO_METHOD_ATTR_STATIC                    = 0x0010,
145         MONO_METHOD_ATTR_FINAL                     = 0x0020,
146         MONO_METHOD_ATTR_VIRTUAL                   = 0x0040,
147         MONO_METHOD_ATTR_HIDE_BY_SIG               = 0x0080,
148
149         MONO_METHOD_ATTR_VTABLE_LAYOUT_MASK        = 0x0100,
150         MONO_METHOD_ATTR_REUSE_SLOT                = 0x0000,
151         MONO_METHOD_ATTR_NEW_SLOT                  = 0x0100,
152         MONO_METHOD_ATTR_STRICT                    = 0x0200,
153         MONO_METHOD_ATTR_ABSTRACT                  = 0x0400,
154
155         MONO_METHOD_ATTR_SPECIAL_NAME              = 0x0800,
156
157         MONO_METHOD_ATTR_PINVOKE_IMPL              = 0x2000,
158         MONO_METHOD_ATTR_UNMANAGED_EXPORT          = 0x0008,
159
160 /*
161  * For runtime use only
162  */
163         MONO_METHOD_ATTR_RESERVED_MASK             = 0xd000,
164         MONO_METHOD_ATTR_RT_SPECIAL_NAME           = 0x1000,
165         MONO_METHOD_ATTR_HAS_SECURITY              = 0x4000,
166         MONO_METHOD_ATTR_REQUIRE_SEC_OBJECT        = 0x8000
167 };
168
169 /*
170  * Method Impl Attributes (23.1.11)
171  */
172 enum {
173         MONO_METHOD_IMPL_ATTR_CODE_TYPE_MASK       = 0x0003,
174         MONO_METHOD_IMPL_ATTR_IL                   = 0x0000,
175         MONO_METHOD_IMPL_ATTR_NATIVE               = 0x0001,
176         MONO_METHOD_IMPL_ATTR_OPTIL                = 0x0002,
177         MONO_METHOD_IMPL_ATTR_RUNTIME              = 0x0003,
178
179         MONO_METHOD_IMPL_ATTR_MANAGED_MASK         = 0x0004,
180         MONO_METHOD_IMPL_ATTR_UNMANAGED            = 0x0004,
181         MONO_METHOD_IMPL_ATTR_MANAGED              = 0x0000,
182
183         MONO_METHOD_IMPL_ATTR_FORWARD_REF          = 0x0010,
184         MONO_METHOD_IMPL_ATTR_PRESERVE_SIG         = 0x0080,
185         MONO_METHOD_IMPL_ATTR_INTERNAL_CALL        = 0x1000,
186         MONO_METHOD_IMPL_ATTR_SYNCHRONIZED         = 0x0020,
187         MONO_METHOD_IMPL_ATTR_NOINLINING           = 0x0008,
188         MONO_METHOD_IMPL_ATTR_NOOPTIMIZATION       = 0x0040,    
189         MONO_METHOD_IMPL_ATTR_MAX_METHOD_IMPL_VAL  = 0xffff
190 };
191
192 /*
193  * Method Semantics ([MethodSemanticAttributes]) 23.1.12,
194  */
195 enum {
196         MONO_METHOD_SEMANTIC_SETTER    = 0x0001,
197         MONO_METHOD_SEMANTIC_GETTER    = 0x0002,
198         MONO_METHOD_SEMANTIC_OTHER     = 0x0004,
199         MONO_METHOD_SEMANTIC_ADD_ON    = 0x0008,
200         MONO_METHOD_SEMANTIC_REMOVE_ON = 0x0010,
201         MONO_METHOD_SEMANTIC_FIRE      = 0x0020
202 };
203
204 /*
205  * Flags for Params (23.1.13)
206  */
207 enum {
208         MONO_PARAM_ATTR_IN                 = 0x0001,
209         MONO_PARAM_ATTR_OUT                = 0x0002,
210         MONO_PARAM_ATTR_OPTIONAL           = 0x0010,
211         MONO_PARAM_ATTR_RESERVED_MASK      = 0xf000,
212         MONO_PARAM_ATTR_HAS_DEFAULT        = 0x1000,
213         MONO_PARAM_ATTR_HAS_MARSHAL        = 0x2000,
214         MONO_PARAM_ATTR_UNUSED             = 0xcfe0
215 };
216
217 /*
218  * 23.1.14 PropertyAttributes
219  */
220 enum {
221         MONO_PROPERTY_ATTR_SPECIAL_NAME    = 0x0200,
222         MONO_PROPERTY_ATTR_RESERVED_MASK   = 0xf400,
223         MONO_PROPERTY_ATTR_RT_SPECIAL_NAME = 0x0400,
224         MONO_PROPERTY_ATTR_HAS_DEFAULT     = 0x1000,
225         MONO_PROPERTY_ATTR_UNUSED          = 0xe9ff
226 };
227
228 /*
229  * Type Attributes (23.1.15).
230  */
231 enum {
232         MONO_TYPE_ATTR_VISIBILITY_MASK       = 0x00000007,
233         MONO_TYPE_ATTR_NOT_PUBLIC            = 0x00000000,
234         MONO_TYPE_ATTR_PUBLIC                = 0x00000001,
235         MONO_TYPE_ATTR_NESTED_PUBLIC         = 0x00000002,
236         MONO_TYPE_ATTR_NESTED_PRIVATE        = 0x00000003,
237         MONO_TYPE_ATTR_NESTED_FAMILY         = 0x00000004,
238         MONO_TYPE_ATTR_NESTED_ASSEMBLY       = 0x00000005,
239         MONO_TYPE_ATTR_NESTED_FAM_AND_ASSEM  = 0x00000006,
240         MONO_TYPE_ATTR_NESTED_FAM_OR_ASSEM   = 0x00000007,
241
242         MONO_TYPE_ATTR_LAYOUT_MASK           = 0x00000018,
243         MONO_TYPE_ATTR_AUTO_LAYOUT           = 0x00000000,
244         MONO_TYPE_ATTR_SEQUENTIAL_LAYOUT     = 0x00000008,
245         MONO_TYPE_ATTR_EXPLICIT_LAYOUT       = 0x00000010,
246
247         MONO_TYPE_ATTR_CLASS_SEMANTIC_MASK   = 0x00000020,
248         MONO_TYPE_ATTR_CLASS                 = 0x00000000,
249         MONO_TYPE_ATTR_INTERFACE             = 0x00000020,
250
251         MONO_TYPE_ATTR_ABSTRACT              = 0x00000080,
252         MONO_TYPE_ATTR_SEALED                = 0x00000100,
253         MONO_TYPE_ATTR_SPECIAL_NAME          = 0x00000400,
254
255         MONO_TYPE_ATTR_IMPORT                = 0x00001000,
256         MONO_TYPE_ATTR_SERIALIZABLE          = 0x00002000,
257
258         MONO_TYPE_ATTR_STRING_FORMAT_MASK    = 0x00030000,
259         MONO_TYPE_ATTR_ANSI_CLASS            = 0x00000000,
260         MONO_TYPE_ATTR_UNICODE_CLASS         = 0x00010000,
261         MONO_TYPE_ATTR_AUTO_CLASS            = 0x00020000,
262         MONO_TYPE_ATTR_CUSTOM_CLASS          = 0x00030000,
263         MONO_TYPE_ATTR_CUSTOM_MASK           = 0x00c00000,
264
265         MONO_TYPE_ATTR_BEFORE_FIELD_INIT     = 0x00100000,
266         MONO_TYPE_ATTR_FORWARDER             = 0x00200000,
267
268         MONO_TYPE_ATTR_RESERVED_MASK         = 0x00040800,
269         MONO_TYPE_ATTR_RT_SPECIAL_NAME       = 0x00000800,
270         MONO_TYPE_ATTR_HAS_SECURITY          = 0x00040000
271 };
272
273 #endif