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.
39 } MonoReflectionMethod;
43 MonoReflectionMethod *method;
54 MonoObject *target_type;
56 MonoString *method_name;
58 MonoReflectionMethod *method_info;
61 typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
62 struct _MonoMulticastDelegate {
63 MonoDelegate delegate;
64 MonoMulticastDelegate *prev;
70 MonoClassField *field;
71 } MonoReflectionField;
76 MonoProperty *property;
77 } MonoReflectionProperty;
83 } MonoReflectionEvent;
87 MonoReflectionType *ClassImpl;
88 MonoObject *DefaultValueImpl;
89 MonoObject *MemberImpl;
93 } MonoReflectionParameter;
96 MonoReflectionType *utype;
102 MonoReflectionType *parent;
103 MonoReflectionType *ret;
110 MonoReflectionType *parent;
112 MonoReflectionMethod *get;
113 MonoReflectionMethod *set;
118 MonoReflectionType *parent;
119 MonoReflectionType *type;
126 MonoString *name_space;
127 MonoReflectionType *parent;
128 MonoReflectionType *etype;
129 MonoAssembly *assembly;
132 MonoBoolean isbyref, ispointer, isprimitive;
138 } MonoReflectionILTokenInfo;
143 MonoObject *mbuilder;
148 MonoArray *ex_handlers;
149 gint32 num_token_fixups;
150 MonoArray *token_fixups;
151 } MonoReflectionILGen;
158 } MonoILExceptionInfo;
161 MonoReflectionType *extype;
165 gint32 filter_offset;
166 } MonoILExceptionBlock;
170 MonoReflectionType *type;
172 } MonoReflectionLocalBuilder;
182 } MonoReflectionParamBuilder;
186 MonoReflectionILGen *ilgen;
187 MonoArray *parameters;
195 } MonoReflectionCtorBuilder;
200 MonoReflectionType *rtype;
201 MonoArray *parameters;
207 MonoReflectionILGen *ilgen;
211 MonoReflectionMethod *override_method;
213 MonoString *dllentry;
217 } MonoReflectionMethodBuilder;
220 MonoAssembly assembly;
223 guint32 metadata_rva;
225 MonoGHashTable *token_fixups;
226 MonoDynamicStream sheap;
227 MonoDynamicStream code; /* used to store method headers and bytecode */
228 MonoDynamicStream us;
229 MonoDynamicStream blob;
230 MonoDynamicStream tstream;
231 MonoDynamicStream guid;
232 MonoDynamicTable tables [64];
233 } MonoDynamicAssembly;
237 MonoAssembly *assembly;
238 } MonoReflectionAssembly;
241 MonoReflectionAssembly assembly;
242 MonoDynamicAssembly *dynamic_assembly;
243 MonoReflectionMethodBuilder *entry_point;
247 } MonoReflectionAssemblyBuilder;
252 MonoReflectionType *type;
254 MonoObject *def_value;
257 MonoReflectionType *typeb;
260 } MonoReflectionFieldBuilder;
266 MonoReflectionType *type;
267 MonoArray *parameters;
269 MonoObject *def_value;
270 MonoReflectionMethodBuilder *set_method;
271 MonoReflectionMethodBuilder *get_method;
273 } MonoReflectionPropertyBuilder;
278 MonoObject *assembly;
281 MonoString *scopename;
282 } MonoReflectionModule;
285 MonoReflectionModule module;
289 MonoReflectionAssemblyBuilder *assemblyb;
290 } MonoReflectionModuleBuilder;
293 MonoReflectionType type;
296 MonoReflectionType *parent;
297 MonoArray *interfaces;
300 MonoArray *properties;
307 MonoReflectionModuleBuilder *module;
310 } MonoReflectionTypeBuilder;
315 MonoString *codebase;
317 } MonoReflectionAssemblyName;
322 MonoReflectionType *type;
323 MonoReflectionTypeBuilder *typeb;
325 MonoReflectionMethodBuilder *add_method;
326 MonoReflectionMethodBuilder *remove_method;
327 MonoReflectionMethodBuilder *raise_method;
328 MonoArray *other_methods;
331 } MonoReflectionEventBuilder;
335 MonoReflectionMethod *ctor;
337 } MonoReflectionCustomAttr;
340 char *nest_name_space;
345 GList *modifiers; /* 0 -> byref, -1 -> pointer, > 0 -> array rank */
350 MonoReflectionModuleBuilder *module;
351 MonoArray *arguments;
353 } MonoReflectionSigHelper;
357 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
358 MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase);
360 int mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
361 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
362 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
363 guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
365 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
366 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
367 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method);
368 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
369 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
370 MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
371 /* note: this one is slightly different: we keep the whole array of params in the cache */
372 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
375 typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params);
377 extern MonoInvokeFunc mono_default_runtime_invoke;
379 void mono_install_runtime_invoke (MonoInvokeFunc func);
380 MonoObject* mono_runtime_invoke (MonoMethod *method, void *obj, void **params);
381 MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
382 MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
384 void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
386 MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
388 MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
390 #endif /* __METADATA_REFLECTION_H__ */