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 {
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;
109 MonoReflectionType *type;
116 MonoString *name_space;
117 MonoReflectionType *parent;
118 MonoReflectionType *etype;
119 MonoReflectionAssembly *assembly;
122 MonoBoolean isbyref, ispointer, isprimitive;
128 } MonoReflectionILTokenInfo;
133 MonoObject *mbuilder;
138 MonoArray *ex_handlers;
139 gint32 num_token_fixups;
140 MonoArray *token_fixups;
141 } MonoReflectionILGen;
148 } MonoILExceptionInfo;
151 MonoReflectionType *extype;
155 gint32 filter_offset;
156 } MonoILExceptionBlock;
160 MonoReflectionType *type;
162 } MonoReflectionLocalBuilder;
172 } MonoReflectionParamBuilder;
176 MonoReflectionILGen *ilgen;
177 MonoArray *parameters;
185 MonoBoolean init_locals;
186 } MonoReflectionCtorBuilder;
191 MonoReflectionType *rtype;
192 MonoArray *parameters;
198 MonoReflectionILGen *ilgen;
202 MonoReflectionMethod *override_method;
204 MonoString *dllentry;
208 MonoBoolean init_locals;
209 } MonoReflectionMethodBuilder;
212 MonoAssembly assembly;
215 guint32 metadata_rva;
217 GHashTable *handleref;
218 MonoGHashTable *token_fixups;
219 MonoDynamicStream sheap;
220 MonoDynamicStream code; /* used to store method headers and bytecode */
221 MonoDynamicStream us;
222 MonoDynamicStream blob;
223 MonoDynamicStream tstream;
224 MonoDynamicStream guid;
225 MonoDynamicTable tables [64];
226 } MonoDynamicAssembly;
229 MonoReflectionAssembly assembly;
230 MonoDynamicAssembly *dynamic_assembly;
231 MonoReflectionMethodBuilder *entry_point;
236 } MonoReflectionAssemblyBuilder;
241 MonoReflectionType *type;
243 MonoObject *def_value;
246 MonoReflectionType *typeb;
249 } MonoReflectionFieldBuilder;
255 MonoReflectionType *type;
256 MonoArray *parameters;
258 MonoObject *def_value;
259 MonoReflectionMethodBuilder *set_method;
260 MonoReflectionMethodBuilder *get_method;
262 } MonoReflectionPropertyBuilder;
267 MonoObject *assembly;
270 MonoString *scopename;
271 } MonoReflectionModule;
274 MonoReflectionModule module;
279 MonoReflectionAssemblyBuilder *assemblyb;
280 } MonoReflectionModuleBuilder;
283 MonoReflectionType type;
286 MonoReflectionType *parent;
287 MonoArray *interfaces;
290 MonoArray *properties;
297 MonoReflectionModuleBuilder *module;
300 } MonoReflectionTypeBuilder;
305 MonoString *codebase;
306 gint32 major, minor, build, revision;
307 /* FIXME: add missing stuff */
308 } MonoReflectionAssemblyName;
313 MonoReflectionType *type;
314 MonoReflectionTypeBuilder *typeb;
316 MonoReflectionMethodBuilder *add_method;
317 MonoReflectionMethodBuilder *remove_method;
318 MonoReflectionMethodBuilder *raise_method;
319 MonoArray *other_methods;
322 } MonoReflectionEventBuilder;
326 MonoReflectionMethod *ctor;
328 } MonoReflectionCustomAttr;
331 char *nest_name_space;
336 GList *modifiers; /* 0 -> byref, -1 -> pointer, > 0 -> array rank */
341 MonoReflectionModuleBuilder *module;
342 MonoArray *arguments;
344 } MonoReflectionSigHelper;
348 char* mono_type_get_name (MonoType *type);
349 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
350 MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase);
352 int mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
353 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
354 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
355 guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
357 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
358 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
359 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method);
360 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
361 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
362 MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
363 /* note: this one is slightly different: we keep the whole array of params in the cache */
364 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
366 MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
367 MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
369 void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
371 MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
373 MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
375 #endif /* __METADATA_REFLECTION_H__ */