[metadata] Fix leaks when handling a few attributes (#16675)
[mono-project.git] / mono / metadata / attrdefs.h
blob504c6c65fc6d2e87acbe6842fb89e4cb48875f0a
1 /**
2 * \file
3 * This file contains the various definitions for constants
4 * found on the metadata tables
6 * Author:
7 * Miguel de Icaza (miguel@ximian.com)
8 * Paolo Molaro (lupus@ximian.com)
10 * (C) 2001 Ximian, Inc.
11 * (C) 2006 Novell, Inc.
13 * From the ECMA documentation
16 #ifndef _MONO_METADATA_ATTRDEFS_H_
17 #define _MONO_METADATA_ATTRDEFS_H_
20 * 23.1.1 Values for AssemblyHashAlgorithm
22 enum {
23 MONO_ASSEMBLY_HASH_NONE,
24 MONO_ASSEMBLY_HASH_MD5 = 0x8003,
25 MONO_ASSEMBLY_HASH_SHA1 = 0x8004
29 * 23.1.2 AssemblyRefs
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
39 * 23.1.4 Flags for Event.EventAttributes
41 enum {
42 MONO_EVENT_SPECIALNAME = 0x0200,
43 MONO_EVENT_RTSPECIALNAME = 0x0400
47 * Field Attributes (23.1.5).
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,
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,
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
75 * 23.1.6 Flags for FileAttributes
77 enum {
78 MONO_FILE_HAS_METADATA = 0,
79 MONO_FILE_HAS_NO_METADATA = 1
83 * 23.1.7 Flags for generic parameters
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
97 * 23.1.8 Flags for ImplMap [PInvokeAttributes]
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
124 * 23.1.9 Flags for ManifestResource
126 enum {
127 MONO_MANIFEST_RESOURCE_VISIBILITY_MASK = 0x00000007,
128 MONO_MANIFEST_RESOURCE_PUBLIC = 0x00000001,
129 MONO_MANIFEST_RESOURCE_PRIVATE = 0x00000002
133 * Method Attributes (23.1.10)
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,
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,
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,
156 MONO_METHOD_ATTR_SPECIAL_NAME = 0x0800,
158 MONO_METHOD_ATTR_PINVOKE_IMPL = 0x2000,
159 MONO_METHOD_ATTR_UNMANAGED_EXPORT = 0x0008,
162 * For runtime use only
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
171 * Method Impl Attributes (23.1.11)
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,
180 MONO_METHOD_IMPL_ATTR_MANAGED_MASK = 0x0004,
181 MONO_METHOD_IMPL_ATTR_UNMANAGED = 0x0004,
182 MONO_METHOD_IMPL_ATTR_MANAGED = 0x0000,
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
194 * Method Semantics ([MethodSemanticAttributes]) 23.1.12,
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
206 * Flags for Params (23.1.13)
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
219 * 23.1.14 PropertyAttributes
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
230 * Type Attributes (23.1.15).
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,
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,
248 MONO_TYPE_ATTR_CLASS_SEMANTIC_MASK = 0x00000020,
249 MONO_TYPE_ATTR_CLASS = 0x00000000,
250 MONO_TYPE_ATTR_INTERFACE = 0x00000020,
252 MONO_TYPE_ATTR_ABSTRACT = 0x00000080,
253 MONO_TYPE_ATTR_SEALED = 0x00000100,
254 MONO_TYPE_ATTR_SPECIAL_NAME = 0x00000400,
256 MONO_TYPE_ATTR_IMPORT = 0x00001000,
257 MONO_TYPE_ATTR_SERIALIZABLE = 0x00002000,
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,
266 MONO_TYPE_ATTR_BEFORE_FIELD_INIT = 0x00100000,
267 MONO_TYPE_ATTR_FORWARDER = 0x00200000,
269 MONO_TYPE_ATTR_RESERVED_MASK = 0x00040800,
270 MONO_TYPE_ATTR_RT_SPECIAL_NAME = 0x00000800,
271 MONO_TYPE_ATTR_HAS_SECURITY = 0x00040000
274 #endif