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;
64 } MonoReflectionEvent;
68 MonoReflectionType *ClassImpl;
69 MonoObject *DefaultValueImpl;
70 MonoObject *MemberImpl;
74 } MonoReflectionParameter;
77 MonoReflectionType *utype;
83 MonoReflectionType *parent;
84 MonoReflectionType *ret;
91 MonoReflectionType *parent;
93 MonoReflectionMethod *get;
94 MonoReflectionMethod *set;
99 MonoReflectionType *parent;
100 MonoReflectionType *type;
107 MonoString *name_space;
108 MonoReflectionType *parent;
109 MonoReflectionType *etype;
110 MonoAssembly *assembly;
113 MonoBoolean isbyref, ispointer, isprimitive;
119 } MonoReflectionILTokenInfo;
124 MonoObject *mbuilder;
129 MonoArray *ex_handlers;
130 gint32 num_token_fixups;
131 MonoArray *token_fixups;
132 } MonoReflectionILGen;
139 } MonoILExceptionInfo;
142 MonoReflectionType *extype;
146 gint32 filter_offset;
147 } MonoILExceptionBlock;
151 MonoReflectionType *type;
153 } MonoReflectionLocalBuilder;
163 } MonoReflectionParamBuilder;
167 MonoReflectionILGen *ilgen;
168 MonoArray *parameters;
176 } MonoReflectionCtorBuilder;
181 MonoReflectionType *rtype;
182 MonoArray *parameters;
188 MonoReflectionILGen *ilgen;
192 MonoReflectionMethod *override_method;
194 MonoString *dllentry;
198 } MonoReflectionMethodBuilder;
201 MonoAssembly assembly;
204 guint32 metadata_rva;
206 GHashTable *token_fixups;
207 MonoStringHeap sheap;
208 MonoDynamicStream code; /* used to store method headers and bytecode */
209 MonoDynamicStream us;
210 MonoDynamicStream blob;
211 MonoDynamicStream tstream;
212 MonoDynamicStream guid;
213 MonoDynamicTable tables [64];
214 } MonoDynamicAssembly;
218 MonoAssembly *assembly;
219 } MonoReflectionAssembly;
222 MonoReflectionAssembly assembly;
223 MonoDynamicAssembly *dynamic_assembly;
224 MonoReflectionMethodBuilder *entry_point;
228 } MonoReflectionAssemblyBuilder;
233 MonoReflectionType *type;
235 MonoObject *def_value;
238 MonoReflectionType *typeb;
241 } MonoReflectionFieldBuilder;
247 MonoReflectionType *type;
248 MonoArray *parameters;
250 MonoObject *def_value;
251 MonoReflectionMethodBuilder *set_method;
252 MonoReflectionMethodBuilder *get_method;
254 } MonoReflectionPropertyBuilder;
259 MonoObject *assembly;
262 MonoString *scopename;
263 } MonoReflectionModule;
266 MonoReflectionModule module;
270 MonoReflectionAssemblyBuilder *assemblyb;
271 } MonoReflectionModuleBuilder;
274 MonoReflectionType type;
277 MonoReflectionType *parent;
278 MonoArray *interfaces;
281 MonoArray *properties;
288 MonoReflectionModuleBuilder *module;
291 } MonoReflectionTypeBuilder;
296 MonoString *codebase;
298 } MonoReflectionAssemblyName;
303 MonoReflectionType *type;
304 MonoReflectionTypeBuilder *typeb;
306 MonoReflectionMethodBuilder *add_method;
307 MonoReflectionMethodBuilder *remove_method;
308 MonoReflectionMethodBuilder *raise_method;
309 MonoArray *other_methods;
312 } MonoReflectionEventBuilder;
316 MonoReflectionMethod *ctor;
318 } MonoReflectionCustomAttr;
321 char *nest_name_space;
326 int rank; /* we may need more info than this */
331 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
333 int mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
334 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
335 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
336 guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
338 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
339 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
340 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method);
341 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
342 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
343 MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
344 /* note: this one is slightly different: we keep the whole array of params in the cache */
345 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
348 typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params);
350 extern MonoInvokeFunc mono_default_runtime_invoke;
352 void mono_install_runtime_invoke (MonoInvokeFunc func);
353 MonoObject* mono_runtime_invoke (MonoMethod *method, void *obj, void **params);
354 MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
355 MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
357 void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
359 #endif /* __METADATA_REFLECTION_H__ */