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 {
35 MonoReflectionType *reftype;
38 struct _MonoDelegate {
40 MonoObject *target_type;
42 MonoString *method_name;
44 gpointer delegate_trampoline;
45 MonoReflectionMethod *method_info;
48 typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
49 struct _MonoMulticastDelegate {
50 MonoDelegate delegate;
51 MonoMulticastDelegate *prev;
57 MonoClassField *field;
58 } MonoReflectionField;
63 MonoProperty *property;
64 } MonoReflectionProperty;
70 } MonoReflectionEvent;
74 MonoReflectionType *ClassImpl;
75 MonoObject *DefaultValueImpl;
76 MonoObject *MemberImpl;
80 } MonoReflectionParameter;
84 MonoAssembly *assembly;
85 } MonoReflectionAssembly;
88 MonoReflectionType *utype;
94 MonoReflectionType *parent;
95 MonoReflectionType *ret;
101 MonoReflectionType *parent;
103 MonoReflectionMethod *get;
104 MonoReflectionMethod *set;
109 MonoReflectionType *parent;
111 MonoReflectionMethod *add_method;
112 MonoReflectionMethod *remove_method;
113 MonoReflectionMethod *raise_method;
118 MonoReflectionType *parent;
119 MonoReflectionType *type;
126 MonoString *name_space;
127 MonoReflectionType *etype;
128 MonoReflectionType *nested_in;
129 MonoReflectionAssembly *assembly;
131 MonoBoolean 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;
194 MonoReflectionILGen *ilgen;
195 MonoArray *parameters;
203 MonoBoolean init_locals;
204 } MonoReflectionCtorBuilder;
209 MonoReflectionType *rtype;
210 MonoArray *parameters;
216 MonoReflectionILGen *ilgen;
220 MonoReflectionMethod *override_method;
222 MonoString *dllentry;
226 MonoBoolean init_locals;
227 } MonoReflectionMethodBuilder;
232 MonoReflectionType *parent;
233 MonoReflectionType *ret;
234 MonoArray *parameters;
238 } MonoReflectionArrayMethod;
248 MonoAssembly assembly;
251 guint32 metadata_rva;
253 guint32 cli_header_offset;
257 guint32 imp_names_offset;
263 } sections [MONO_SECTION_MAX];
265 GHashTable *handleref;
266 MonoGHashTable *tokens;
267 GHashTable *blob_cache;
268 GList *array_methods;
269 MonoGHashTable *token_fixups;
271 guint32 strong_name_size;
272 MonoDynamicStream pefile;
273 MonoDynamicStream sheap;
274 MonoDynamicStream code; /* used to store method headers and bytecode */
275 MonoDynamicStream resources; /* managed embedded resources */
276 MonoDynamicStream us;
277 MonoDynamicStream blob;
278 MonoDynamicStream tstream;
279 MonoDynamicStream guid;
280 MonoDynamicTable tables [64];
281 } MonoDynamicAssembly;
286 MonoString *filename;
288 } MonoReflectionResource;
291 MonoReflectionAssembly assembly;
292 MonoDynamicAssembly *dynamic_assembly;
293 MonoReflectionMethodBuilder *entry_point;
298 MonoArray *resources;
305 MonoBoolean delay_sign;
306 } MonoReflectionAssemblyBuilder;
311 MonoReflectionType *type;
313 MonoObject *def_value;
316 MonoReflectionType *typeb;
319 MonoReflectionMarshal *marshal_info;
320 MonoClassField *handle;
321 } MonoReflectionFieldBuilder;
327 MonoReflectionType *type;
328 MonoArray *parameters;
330 MonoObject *def_value;
331 MonoReflectionMethodBuilder *set_method;
332 MonoReflectionMethodBuilder *get_method;
334 } MonoReflectionPropertyBuilder;
339 MonoReflectionAssembly *assembly;
342 MonoString *scopename;
343 } MonoReflectionModule;
346 MonoReflectionModule module;
351 MonoReflectionAssemblyBuilder *assemblyb;
352 MonoArray *global_methods;
353 MonoArray *global_fields;
354 } MonoReflectionModuleBuilder;
357 MonoReflectionType type;
360 MonoReflectionType *parent;
361 MonoReflectionType *nesting_type;
362 MonoArray *interfaces;
365 MonoArray *properties;
372 MonoReflectionModuleBuilder *module;
375 } MonoReflectionTypeBuilder;
380 MonoString *codebase;
381 gint32 major, minor, build, revision;
382 /* FIXME: add missing stuff */
383 /* CultureInfo cultureinfo;
384 AssemblyNameFlags flags;
385 AssemblyHashAlgorithm hashalg;
386 StrongNameKeyPair keypair;
387 AssemblyVersionCompatibility versioncompat;*/
388 MonoObject *cultureInfo;
392 MonoArray *publicKey;
394 MonoObject *versioncompat;
395 } MonoReflectionAssemblyName;
400 MonoReflectionType *type;
401 MonoReflectionTypeBuilder *typeb;
403 MonoReflectionMethodBuilder *add_method;
404 MonoReflectionMethodBuilder *remove_method;
405 MonoReflectionMethodBuilder *raise_method;
406 MonoArray *other_methods;
409 } MonoReflectionEventBuilder;
413 MonoReflectionMethod *ctor;
415 } MonoReflectionCustomAttr;
417 typedef struct MonoTypeNameParse MonoTypeNameParse;
419 struct MonoTypeNameParse {
422 MonoAssemblyName assembly;
423 GList *modifiers; /* 0 -> byref, -1 -> pointer, > 0 -> array rank */
429 MonoReflectionModuleBuilder *module;
430 MonoArray *arguments;
432 MonoReflectionType *return_type;
434 guint32 unmanaged_call_conv;
435 } MonoReflectionSigHelper;
439 char* mono_type_get_name (MonoType *type);
440 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
441 MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase);
442 MonoType* mono_reflection_type_from_name (char *name, MonoImage *image);
444 void mono_image_create_pefile (MonoReflectionAssemblyBuilder *assembly);
445 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
446 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
447 guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
448 void mono_image_module_basic_init (MonoReflectionModuleBuilder *module);
450 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
451 MonoReflectionModule* mono_module_get_object (MonoDomain *domain, MonoImage *image);
452 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
453 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method, MonoClass *refclass);
454 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
455 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
456 MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
457 /* note: this one is slightly different: we keep the whole array of params in the cache */
458 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
460 MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
461 MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
463 void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
465 void mono_reflection_create_internal_class (MonoReflectionTypeBuilder *tb);
467 MonoReflectionType* mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb);
469 MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
471 MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
474 mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token);
477 mono_image_build_metadata (MonoReflectionAssemblyBuilder *assemblyb);
479 #endif /* __METADATA_REFLECTION_H__ */