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