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 } MonoReflectionCtorBuilder;
190 MonoReflectionType *rtype;
191 MonoArray *parameters;
197 MonoReflectionILGen *ilgen;
201 MonoReflectionMethod *override_method;
203 MonoString *dllentry;
207 } MonoReflectionMethodBuilder;
210 MonoAssembly assembly;
213 guint32 metadata_rva;
215 GHashTable *handleref;
216 MonoGHashTable *token_fixups;
217 MonoDynamicStream sheap;
218 MonoDynamicStream code; /* used to store method headers and bytecode */
219 MonoDynamicStream us;
220 MonoDynamicStream blob;
221 MonoDynamicStream tstream;
222 MonoDynamicStream guid;
223 MonoDynamicTable tables [64];
224 } MonoDynamicAssembly;
227 MonoReflectionAssembly assembly;
228 MonoDynamicAssembly *dynamic_assembly;
229 MonoReflectionMethodBuilder *entry_point;
234 } MonoReflectionAssemblyBuilder;
239 MonoReflectionType *type;
241 MonoObject *def_value;
244 MonoReflectionType *typeb;
247 } MonoReflectionFieldBuilder;
253 MonoReflectionType *type;
254 MonoArray *parameters;
256 MonoObject *def_value;
257 MonoReflectionMethodBuilder *set_method;
258 MonoReflectionMethodBuilder *get_method;
260 } MonoReflectionPropertyBuilder;
265 MonoObject *assembly;
268 MonoString *scopename;
269 } MonoReflectionModule;
272 MonoReflectionModule module;
277 MonoReflectionAssemblyBuilder *assemblyb;
278 } MonoReflectionModuleBuilder;
281 MonoReflectionType type;
284 MonoReflectionType *parent;
285 MonoArray *interfaces;
288 MonoArray *properties;
295 MonoReflectionModuleBuilder *module;
298 } MonoReflectionTypeBuilder;
303 MonoString *codebase;
304 gint32 major, minor, build, revision;
305 /* FIXME: add missing stuff */
306 } MonoReflectionAssemblyName;
311 MonoReflectionType *type;
312 MonoReflectionTypeBuilder *typeb;
314 MonoReflectionMethodBuilder *add_method;
315 MonoReflectionMethodBuilder *remove_method;
316 MonoReflectionMethodBuilder *raise_method;
317 MonoArray *other_methods;
320 } MonoReflectionEventBuilder;
324 MonoReflectionMethod *ctor;
326 } MonoReflectionCustomAttr;
329 char *nest_name_space;
334 GList *modifiers; /* 0 -> byref, -1 -> pointer, > 0 -> array rank */
339 MonoReflectionModuleBuilder *module;
340 MonoArray *arguments;
342 } MonoReflectionSigHelper;
346 char* mono_type_get_name (MonoType *type);
347 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
348 MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase);
350 int mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
351 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
352 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
353 guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
355 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
356 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
357 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method);
358 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
359 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
360 MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
361 /* note: this one is slightly different: we keep the whole array of params in the cache */
362 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
364 MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
365 MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
367 void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
369 MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
371 MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
373 #endif /* __METADATA_REFLECTION_H__ */