reflection.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /**
  2. * \file
  3. */
  4. #ifndef __METADATA_REFLECTION_H__
  5. #define __METADATA_REFLECTION_H__
  6. #include <mono/utils/mono-publib.h>
  7. #include <mono/metadata/object.h>
  8. MONO_BEGIN_DECLS
  9. typedef struct MonoTypeNameParse MonoTypeNameParse;
  10. typedef struct {
  11. MonoMethod *ctor;
  12. uint32_t data_size;
  13. const mono_byte* data;
  14. } MonoCustomAttrEntry;
  15. typedef struct {
  16. int num_attrs;
  17. int cached;
  18. MonoImage *image;
  19. MonoCustomAttrEntry attrs [MONO_ZERO_LEN_ARRAY];
  20. } MonoCustomAttrInfo;
  21. #define MONO_SIZEOF_CUSTOM_ATTR_INFO (offsetof (MonoCustomAttrInfo, attrs))
  22. /*
  23. * Information which isn't in the MonoMethod structure is stored here for
  24. * dynamic methods.
  25. */
  26. typedef struct {
  27. char **param_names;
  28. MonoMarshalSpec **param_marshall;
  29. MonoCustomAttrInfo **param_cattr;
  30. uint8_t** param_defaults;
  31. uint32_t *param_default_types;
  32. char *dllentry, *dll;
  33. } MonoReflectionMethodAux;
  34. typedef enum {
  35. ResolveTokenError_OutOfRange,
  36. ResolveTokenError_BadTable,
  37. ResolveTokenError_Other
  38. } MonoResolveTokenError;
  39. MONO_API MONO_RT_EXTERNAL_ONLY
  40. int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
  41. MONO_API MONO_RT_EXTERNAL_ONLY
  42. MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, mono_bool ignorecase, mono_bool *type_resolve);
  43. MONO_API void mono_reflection_free_type_info (MonoTypeNameParse *info);
  44. MONO_API MONO_RT_EXTERNAL_ONLY
  45. MonoType* mono_reflection_type_from_name (char *name, MonoImage *image);
  46. MONO_API MONO_RT_EXTERNAL_ONLY
  47. uint32_t mono_reflection_get_token (MonoObject *obj);
  48. MONO_API MONO_RT_EXTERNAL_ONLY
  49. MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
  50. MONO_API MONO_RT_EXTERNAL_ONLY
  51. MonoReflectionModule* mono_module_get_object (MonoDomain *domain, MonoImage *image);
  52. MONO_API MONO_RT_EXTERNAL_ONLY
  53. MonoReflectionModule* mono_module_file_get_object (MonoDomain *domain, MonoImage *image, int table_index);
  54. MONO_API MONO_RT_EXTERNAL_ONLY
  55. MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
  56. MONO_API MONO_RT_EXTERNAL_ONLY
  57. MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method, MonoClass *refclass);
  58. MONO_API MONO_RT_EXTERNAL_ONLY
  59. MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
  60. MONO_API MONO_RT_EXTERNAL_ONLY
  61. MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
  62. MONO_API MONO_RT_EXTERNAL_ONLY
  63. MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
  64. /* note: this one is slightly different: we keep the whole array of params in the cache */
  65. MONO_API MONO_RT_EXTERNAL_ONLY
  66. MonoArray* mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
  67. MONO_API MONO_RT_EXTERNAL_ONLY
  68. MonoReflectionMethodBody* mono_method_body_get_object (MonoDomain *domain, MonoMethod *method);
  69. MONO_API MonoObject *mono_get_dbnull_object (MonoDomain *domain);
  70. MONO_API MonoArray* mono_reflection_get_custom_attrs_by_type (MonoObject *obj, MonoClass *attr_klass, MonoError *error);
  71. MONO_API MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
  72. MONO_API MONO_RT_EXTERNAL_ONLY
  73. MonoArray* mono_reflection_get_custom_attrs_data (MonoObject *obj);
  74. MONO_API MONO_RT_EXTERNAL_ONLY
  75. MonoArray* mono_reflection_get_custom_attrs_blob (MonoReflectionAssembly *assembly, MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
  76. MONO_API MONO_RT_EXTERNAL_ONLY
  77. MonoCustomAttrInfo* mono_reflection_get_custom_attrs_info (MonoObject *obj);
  78. MONO_API MONO_RT_EXTERNAL_ONLY
  79. MonoArray* mono_custom_attrs_construct (MonoCustomAttrInfo *cinfo);
  80. MONO_API MONO_RT_EXTERNAL_ONLY
  81. MonoCustomAttrInfo* mono_custom_attrs_from_index (MonoImage *image, uint32_t idx);
  82. MONO_API MONO_RT_EXTERNAL_ONLY
  83. MonoCustomAttrInfo* mono_custom_attrs_from_method (MonoMethod *method);
  84. MONO_API MONO_RT_EXTERNAL_ONLY
  85. MonoCustomAttrInfo* mono_custom_attrs_from_class (MonoClass *klass);
  86. MONO_API MONO_RT_EXTERNAL_ONLY
  87. MonoCustomAttrInfo* mono_custom_attrs_from_assembly (MonoAssembly *assembly);
  88. MONO_API MONO_RT_EXTERNAL_ONLY
  89. MonoCustomAttrInfo* mono_custom_attrs_from_property (MonoClass *klass, MonoProperty *property);
  90. MONO_API MONO_RT_EXTERNAL_ONLY
  91. MonoCustomAttrInfo* mono_custom_attrs_from_event (MonoClass *klass, MonoEvent *event);
  92. MONO_API MONO_RT_EXTERNAL_ONLY
  93. MonoCustomAttrInfo* mono_custom_attrs_from_field (MonoClass *klass, MonoClassField *field);
  94. MONO_API MONO_RT_EXTERNAL_ONLY
  95. MonoCustomAttrInfo* mono_custom_attrs_from_param (MonoMethod *method, uint32_t param);
  96. MONO_API mono_bool mono_custom_attrs_has_attr (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass);
  97. MONO_API MONO_RT_EXTERNAL_ONLY
  98. MonoObject* mono_custom_attrs_get_attr (MonoCustomAttrInfo *ainfo, MonoClass *attr_klass);
  99. MONO_API void mono_custom_attrs_free (MonoCustomAttrInfo *ainfo);
  100. #define MONO_DECLSEC_ACTION_MIN 0x1
  101. #define MONO_DECLSEC_ACTION_MAX 0x12
  102. enum {
  103. MONO_DECLSEC_FLAG_REQUEST = 0x00000001,
  104. MONO_DECLSEC_FLAG_DEMAND = 0x00000002,
  105. MONO_DECLSEC_FLAG_ASSERT = 0x00000004,
  106. MONO_DECLSEC_FLAG_DENY = 0x00000008,
  107. MONO_DECLSEC_FLAG_PERMITONLY = 0x00000010,
  108. MONO_DECLSEC_FLAG_LINKDEMAND = 0x00000020,
  109. MONO_DECLSEC_FLAG_INHERITANCEDEMAND = 0x00000040,
  110. MONO_DECLSEC_FLAG_REQUEST_MINIMUM = 0x00000080,
  111. MONO_DECLSEC_FLAG_REQUEST_OPTIONAL = 0x00000100,
  112. MONO_DECLSEC_FLAG_REQUEST_REFUSE = 0x00000200,
  113. MONO_DECLSEC_FLAG_PREJIT_GRANT = 0x00000400,
  114. MONO_DECLSEC_FLAG_PREJIT_DENY = 0x00000800,
  115. MONO_DECLSEC_FLAG_NONCAS_DEMAND = 0x00001000,
  116. MONO_DECLSEC_FLAG_NONCAS_LINKDEMAND = 0x00002000,
  117. MONO_DECLSEC_FLAG_NONCAS_INHERITANCEDEMAND = 0x00004000,
  118. MONO_DECLSEC_FLAG_LINKDEMAND_CHOICE = 0x00008000,
  119. MONO_DECLSEC_FLAG_INHERITANCEDEMAND_CHOICE = 0x00010000,
  120. MONO_DECLSEC_FLAG_DEMAND_CHOICE = 0x00020000
  121. };
  122. MONO_API uint32_t mono_declsec_flags_from_method (MonoMethod *method);
  123. MONO_API uint32_t mono_declsec_flags_from_class (MonoClass *klass);
  124. MONO_API uint32_t mono_declsec_flags_from_assembly (MonoAssembly *assembly);
  125. /* this structure MUST be kept in synch with RuntimeDeclSecurityEntry
  126. * located in /mcs/class/corlib/System.Security/SecurityFrame.cs */
  127. typedef struct {
  128. char *blob; /* pointer to metadata blob */
  129. uint32_t size; /* size of the metadata blob */
  130. uint32_t index;
  131. } MonoDeclSecurityEntry;
  132. typedef struct {
  133. MonoDeclSecurityEntry demand;
  134. MonoDeclSecurityEntry noncasdemand;
  135. MonoDeclSecurityEntry demandchoice;
  136. } MonoDeclSecurityActions;
  137. MONO_API MonoBoolean mono_declsec_get_demands (MonoMethod *callee, MonoDeclSecurityActions* demands);
  138. MONO_API MonoBoolean mono_declsec_get_linkdemands (MonoMethod *callee, MonoDeclSecurityActions* klass, MonoDeclSecurityActions* cmethod);
  139. MONO_API MonoBoolean mono_declsec_get_inheritdemands_class (MonoClass *klass, MonoDeclSecurityActions* demands);
  140. MONO_API MonoBoolean mono_declsec_get_inheritdemands_method (MonoMethod *callee, MonoDeclSecurityActions* demands);
  141. MONO_API MonoBoolean mono_declsec_get_method_action (MonoMethod *method, uint32_t action, MonoDeclSecurityEntry *entry);
  142. MONO_API MonoBoolean mono_declsec_get_class_action (MonoClass *klass, uint32_t action, MonoDeclSecurityEntry *entry);
  143. MONO_API MonoBoolean mono_declsec_get_assembly_action (MonoAssembly *assembly, uint32_t action, MonoDeclSecurityEntry *entry);
  144. MONO_API MONO_RT_EXTERNAL_ONLY
  145. MonoType* mono_reflection_type_get_type (MonoReflectionType *reftype);
  146. MONO_API MonoAssembly* mono_reflection_assembly_get_assembly (MonoReflectionAssembly *refassembly);
  147. MONO_END_DECLS
  148. #endif /* __METADATA_REFLECTION_H__ */