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>
8 #include <mono/utils/mono-hash.h>
13 guint32 alloc_size; /* malloced bytes */
15 guint32 offset; /* from start of metadata */
20 guint32 row_size; /* calculated later with column_sizes */
22 guint32 column_sizes [9];
23 guint32 *values; /* rows * columns */
28 * The followinbg structure must match the C# implementation in our corlib.
31 struct _MonoReflectionMethod {
37 struct _MonoDelegate {
39 MonoObject *target_type;
41 MonoString *method_name;
43 gpointer delegate_trampoline;
44 MonoReflectionMethod *method_info;
47 typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
48 struct _MonoMulticastDelegate {
49 MonoDelegate delegate;
50 MonoMulticastDelegate *prev;
56 MonoClassField *field;
57 } MonoReflectionField;
62 MonoProperty *property;
63 } MonoReflectionProperty;
69 } MonoReflectionEvent;
73 MonoReflectionType *ClassImpl;
74 MonoObject *DefaultValueImpl;
75 MonoObject *MemberImpl;
79 } MonoReflectionParameter;
83 MonoAssembly *assembly;
84 } MonoReflectionAssembly;
87 MonoReflectionType *utype;
93 MonoReflectionType *parent;
94 MonoReflectionType *ret;
100 MonoReflectionType *parent;
102 MonoReflectionMethod *get;
103 MonoReflectionMethod *set;
108 MonoReflectionType *parent;
110 MonoReflectionMethod *add_method;
111 MonoReflectionMethod *remove_method;
112 MonoReflectionMethod *raise_method;
117 MonoReflectionType *parent;
118 MonoReflectionType *type;
125 MonoString *name_space;
126 MonoReflectionType *parent;
127 MonoReflectionType *etype;
128 MonoReflectionAssembly *assembly;
131 MonoBoolean isbyref, ispointer, isprimitive;
137 } MonoReflectionILTokenInfo;
142 MonoObject *mbuilder;
147 MonoArray *ex_handlers;
148 gint32 num_token_fixups;
149 MonoArray *token_fixups;
150 } MonoReflectionILGen;
157 } MonoILExceptionInfo;
160 MonoReflectionType *extype;
164 gint32 filter_offset;
165 } MonoILExceptionBlock;
169 MonoReflectionType *type;
171 } MonoReflectionLocalBuilder;
178 } MonoReflectionMarshal;
185 MonoReflectionMarshal *marshal_info;
189 } MonoReflectionParamBuilder;
193 MonoReflectionILGen *ilgen;
194 MonoArray *parameters;
202 MonoBoolean init_locals;
203 } MonoReflectionCtorBuilder;
208 MonoReflectionType *rtype;
209 MonoArray *parameters;
215 MonoReflectionILGen *ilgen;
219 MonoReflectionMethod *override_method;
221 MonoString *dllentry;
225 MonoBoolean init_locals;
226 } MonoReflectionMethodBuilder;
231 MonoReflectionType *parent;
232 MonoReflectionType *ret;
233 MonoArray *parameters;
237 } MonoReflectionArrayMethod;
247 MonoAssembly assembly;
250 guint32 metadata_rva;
252 guint32 cli_header_offset;
256 guint32 imp_names_offset;
262 } sections [MONO_SECTION_MAX];
264 GHashTable *handleref;
265 GList *array_methods;
266 MonoGHashTable *token_fixups;
267 MonoDynamicStream pefile;
268 MonoDynamicStream sheap;
269 MonoDynamicStream code; /* used to store method headers and bytecode */
270 MonoDynamicStream us;
271 MonoDynamicStream blob;
272 MonoDynamicStream tstream;
273 MonoDynamicStream guid;
274 MonoDynamicTable tables [64];
275 } MonoDynamicAssembly;
278 MonoReflectionAssembly assembly;
279 MonoDynamicAssembly *dynamic_assembly;
280 MonoReflectionMethodBuilder *entry_point;
285 } MonoReflectionAssemblyBuilder;
290 MonoReflectionType *type;
292 MonoObject *def_value;
295 MonoReflectionType *typeb;
298 MonoReflectionMarshal *marshal_info;
299 } MonoReflectionFieldBuilder;
305 MonoReflectionType *type;
306 MonoArray *parameters;
308 MonoObject *def_value;
309 MonoReflectionMethodBuilder *set_method;
310 MonoReflectionMethodBuilder *get_method;
312 } MonoReflectionPropertyBuilder;
317 MonoObject *assembly;
320 MonoString *scopename;
321 } MonoReflectionModule;
324 MonoReflectionModule module;
329 MonoReflectionAssemblyBuilder *assemblyb;
330 } MonoReflectionModuleBuilder;
333 MonoReflectionType type;
336 MonoReflectionType *parent;
337 MonoReflectionType *nesting_type;
338 MonoArray *interfaces;
341 MonoArray *properties;
348 MonoReflectionModuleBuilder *module;
351 } MonoReflectionTypeBuilder;
356 MonoString *codebase;
357 gint32 major, minor, build, revision;
358 /* FIXME: add missing stuff */
359 } MonoReflectionAssemblyName;
364 MonoReflectionType *type;
365 MonoReflectionTypeBuilder *typeb;
367 MonoReflectionMethodBuilder *add_method;
368 MonoReflectionMethodBuilder *remove_method;
369 MonoReflectionMethodBuilder *raise_method;
370 MonoArray *other_methods;
373 } MonoReflectionEventBuilder;
377 MonoReflectionMethod *ctor;
379 } MonoReflectionCustomAttr;
381 typedef struct MonoTypeNameParse MonoTypeNameParse;
383 struct MonoTypeNameParse {
386 MonoAssemblyName assembly;
387 GList *modifiers; /* 0 -> byref, -1 -> pointer, > 0 -> array rank */
393 MonoReflectionModuleBuilder *module;
394 MonoArray *arguments;
396 } MonoReflectionSigHelper;
400 char* mono_type_get_name (MonoType *type);
401 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
402 MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase);
403 MonoType* mono_reflection_type_from_name (char *name, MonoImage *image);
405 void mono_image_create_pefile (MonoReflectionAssemblyBuilder *assembly);
406 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
407 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
408 guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
410 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
411 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
412 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method);
413 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
414 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
415 MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
416 /* note: this one is slightly different: we keep the whole array of params in the cache */
417 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
419 MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
420 MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
422 void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
424 void mono_reflection_create_internal_class (MonoReflectionTypeBuilder *tb);
426 MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
428 MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
430 #endif /* __METADATA_REFLECTION_H__ */