1 #ifndef __METADATA_REFLECTION_H__
2 #define __METADATA_REFLECTION_H__
4 #include <mono/metadata/image.h>
5 #include <mono/metadata/metadata.h>
6 #include <mono/metadata/class.h>
7 #include <mono/metadata/object.h>
12 guint32 alloc_size; /* malloced bytes */
14 guint32 offset; /* from start of metadata */
19 guint32 row_size; /* calculated later with column_sizes */
21 guint32 column_sizes [9];
22 guint32 *values; /* rows * columns */
31 guint32 offset; /* from start of metadata */
35 * The followinbg structure must match the C# implementation in our corlib.
46 } MonoReflectionMethod;
51 MonoClassField *field;
52 } MonoReflectionField;
57 MonoProperty *property;
58 } MonoReflectionProperty;
62 MonoReflectionType *ClassImpl;
63 MonoObject *DefaultValueImpl;
64 MonoObject *MemberImpl;
68 } MonoReflectionParameter;
71 MonoReflectionType *utype;
77 MonoReflectionType *parent;
78 MonoReflectionType *ret;
85 MonoReflectionType *parent;
87 MonoReflectionMethod *get;
88 MonoReflectionMethod *set;
93 MonoReflectionType *parent;
94 MonoReflectionType *type;
101 MonoString *name_space;
102 MonoReflectionType *parent;
103 MonoReflectionType *etype;
104 MonoArray *interfaces;
105 MonoAssembly *assembly;
113 MonoObject *mbuilder;
118 MonoArray *ex_handlers;
119 } MonoReflectionILGen;
126 } MonoILExceptionInfo;
129 MonoReflectionType *extype;
133 gint32 filter_offset;
134 } MonoILExceptionBlock;
138 MonoReflectionType *type;
140 } MonoReflectionLocalBuilder;
150 } MonoReflectionParamBuilder;
154 MonoReflectionILGen *ilgen;
155 MonoArray *parameters;
163 } MonoReflectionCtorBuilder;
168 MonoReflectionType *rtype;
169 MonoArray *parameters;
175 MonoReflectionILGen *ilgen;
179 MonoReflectionMethod *override_method;
181 MonoString *dllentry;
185 } MonoReflectionMethodBuilder;
188 MonoAssembly assembly;
191 guint32 metadata_rva;
193 MonoStringHeap sheap;
194 MonoDynamicStream code; /* used to store method headers and bytecode */
195 MonoDynamicStream us;
196 MonoDynamicStream blob;
197 MonoDynamicStream tstream;
198 MonoDynamicStream guid;
199 MonoDynamicTable tables [64];
200 } MonoDynamicAssembly;
204 MonoAssembly *assembly;
205 } MonoReflectionAssembly;
208 MonoReflectionAssembly assembly;
209 MonoDynamicAssembly *dynamic_assembly;
210 MonoReflectionMethodBuilder *entry_point;
214 } MonoReflectionAssemblyBuilder;
219 MonoReflectionType *type;
221 MonoObject *def_value;
224 MonoReflectionType *typeb;
227 } MonoReflectionFieldBuilder;
233 MonoReflectionType *type;
234 MonoArray *parameters;
236 MonoObject *def_value;
237 MonoReflectionMethodBuilder *set_method;
238 MonoReflectionMethodBuilder *get_method;
240 } MonoReflectionPropertyBuilder;
245 MonoObject *assembly;
248 MonoString *scopename;
249 } MonoReflectionModule;
252 MonoReflectionModule module;
256 } MonoReflectionModuleBuilder;
259 MonoReflectionType type;
262 MonoReflectionType *parent;
263 MonoArray *interfaces;
266 MonoArray *properties;
272 MonoReflectionModuleBuilder *module;
275 } MonoReflectionTypeBuilder;
280 MonoString *codebase;
282 } MonoReflectionAssemblyName;
286 MonoReflectionMethod *ctor;
288 } MonoReflectionCustomAttr;
291 char *nest_name_space;
296 int rank; /* we may need more info than this */
301 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
303 int mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
304 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
305 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
306 guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
308 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
309 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
310 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method);
311 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
312 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
313 /* note: this one is slightly different: we keep the whole array of params in the cache */
314 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
317 typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params);
319 extern MonoInvokeFunc mono_default_runtime_invoke;
321 void mono_install_runtime_invoke (MonoInvokeFunc func);
322 MonoObject* mono_runtime_invoke (MonoMethod *method, void *obj, void **params);
323 MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
324 MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
326 #endif /* __METADATA_REFLECTION_H__ */