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