attrdefs.h 8.4 KB

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