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;
50 MonoObject *target_type;
52 MonoString *method_name;
54 MonoReflectionMethod *method_info;
57 typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
58 struct _MonoMulticastDelegate {
59 MonoDelegate delegate;
60 MonoMulticastDelegate *prev;
66 MonoClassField *field;
67 } MonoReflectionField;
72 MonoProperty *property;
73 } MonoReflectionProperty;
79 } MonoReflectionEvent;
83 MonoReflectionType *ClassImpl;
84 MonoObject *DefaultValueImpl;
85 MonoObject *MemberImpl;
89 } MonoReflectionParameter;
92 MonoReflectionType *utype;
98 MonoReflectionType *parent;
99 MonoReflectionType *ret;
106 MonoReflectionType *parent;
108 MonoReflectionMethod *get;
109 MonoReflectionMethod *set;
114 MonoReflectionType *parent;
115 MonoReflectionType *type;
122 MonoString *name_space;
123 MonoReflectionType *parent;
124 MonoReflectionType *etype;
125 MonoAssembly *assembly;
128 MonoBoolean isbyref, ispointer, isprimitive;
134 } MonoReflectionILTokenInfo;
139 MonoObject *mbuilder;
144 MonoArray *ex_handlers;
145 gint32 num_token_fixups;
146 MonoArray *token_fixups;
147 } MonoReflectionILGen;
154 } MonoILExceptionInfo;
157 MonoReflectionType *extype;
161 gint32 filter_offset;
162 } MonoILExceptionBlock;
166 MonoReflectionType *type;
168 } MonoReflectionLocalBuilder;
178 } MonoReflectionParamBuilder;
182 MonoReflectionILGen *ilgen;
183 MonoArray *parameters;
191 } MonoReflectionCtorBuilder;
196 MonoReflectionType *rtype;
197 MonoArray *parameters;
203 MonoReflectionILGen *ilgen;
207 MonoReflectionMethod *override_method;
209 MonoString *dllentry;
213 } MonoReflectionMethodBuilder;
216 MonoAssembly assembly;
219 guint32 metadata_rva;
221 GHashTable *token_fixups;
222 MonoStringHeap sheap;
223 MonoDynamicStream code; /* used to store method headers and bytecode */
224 MonoDynamicStream us;
225 MonoDynamicStream blob;
226 MonoDynamicStream tstream;
227 MonoDynamicStream guid;
228 MonoDynamicTable tables [64];
229 } MonoDynamicAssembly;
233 MonoAssembly *assembly;
234 } MonoReflectionAssembly;
237 MonoReflectionAssembly assembly;
238 MonoDynamicAssembly *dynamic_assembly;
239 MonoReflectionMethodBuilder *entry_point;
243 } MonoReflectionAssemblyBuilder;
248 MonoReflectionType *type;
250 MonoObject *def_value;
253 MonoReflectionType *typeb;
256 } MonoReflectionFieldBuilder;
262 MonoReflectionType *type;
263 MonoArray *parameters;
265 MonoObject *def_value;
266 MonoReflectionMethodBuilder *set_method;
267 MonoReflectionMethodBuilder *get_method;
269 } MonoReflectionPropertyBuilder;
274 MonoObject *assembly;
277 MonoString *scopename;
278 } MonoReflectionModule;
281 MonoReflectionModule module;
285 MonoReflectionAssemblyBuilder *assemblyb;
286 } MonoReflectionModuleBuilder;
289 MonoReflectionType type;
292 MonoReflectionType *parent;
293 MonoArray *interfaces;
296 MonoArray *properties;
303 MonoReflectionModuleBuilder *module;
306 } MonoReflectionTypeBuilder;
311 MonoString *codebase;
313 } MonoReflectionAssemblyName;
318 MonoReflectionType *type;
319 MonoReflectionTypeBuilder *typeb;
321 MonoReflectionMethodBuilder *add_method;
322 MonoReflectionMethodBuilder *remove_method;
323 MonoReflectionMethodBuilder *raise_method;
324 MonoArray *other_methods;
327 } MonoReflectionEventBuilder;
331 MonoReflectionMethod *ctor;
333 } MonoReflectionCustomAttr;
336 char *nest_name_space;
341 GList *modifiers; /* 0 -> byref, -1 -> pointer, > 0 -> array rank */
346 MonoReflectionModuleBuilder *module;
347 MonoArray *arguments;
349 } MonoReflectionSigHelper;
353 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
354 MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase);
356 int mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
357 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
358 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
359 guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
361 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
362 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
363 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method);
364 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
365 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
366 MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
367 /* note: this one is slightly different: we keep the whole array of params in the cache */
368 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
371 typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params);
373 extern MonoInvokeFunc mono_default_runtime_invoke;
375 void mono_install_runtime_invoke (MonoInvokeFunc func);
376 MonoObject* mono_runtime_invoke (MonoMethod *method, void *obj, void **params);
377 MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
378 MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
380 void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
382 MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
384 MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
386 #endif /* __METADATA_REFLECTION_H__ */