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
275