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;
51 MonoClassField *field;
52 } MonoReflectionField;
57 MonoProperty *property;
58 } MonoReflectionProperty;
62 MonoReflectionType *ClassImpl;
63 MonoObject *DefaultValueImpl;
64 MonoObject *MemberImpl;
68 } MonoReflectionParameter;
71 MonoReflectionType *utype;
77 MonoReflectionType *parent;
78 MonoReflectionType *ret;
85 MonoReflectionType *parent;
87 MonoReflectionMethod *get;
88 MonoReflectionMethod *set;
93 MonoReflectionType *parent;
94 MonoReflectionType *type;
101 MonoString *name_space;
102 MonoReflectionType *parent;
103 MonoReflectionType *etype;
104 MonoArray *interfaces;
105 MonoAssembly *assembly;
113 MonoObject *mbuilder;
118 MonoArray *ex_handlers;
119 } MonoReflectionILGen;
125 } MonoILExceptionInfo;
128 MonoReflectionType *extype;
132 gint32 filter_offset;
133 } MonoILExceptionBlock;
137 MonoReflectionType *type;
139 } MonoReflectionLocalBuilder;
148 } MonoReflectionParamBuilder;
152 MonoReflectionILGen *ilgen;
153 MonoArray *parameters;
160 } MonoReflectionCtorBuilder;
165 MonoReflectionType *rtype;
166 MonoArray *parameters;
172 MonoReflectionILGen *ilgen;
175 MonoReflectionMethod *override_method;
177 MonoString *dllentry;
181 } MonoReflectionMethodBuilder;
184 MonoAssembly assembly;
187 guint32 metadata_rva;
189 MonoStringHeap sheap;
190 MonoDynamicStream code; /* used to store method headers and bytecode */
191 MonoDynamicStream us;
192 MonoDynamicStream blob;
193 MonoDynamicStream tstream;
194 MonoDynamicStream guid;
195 MonoDynamicTable tables [64];
196 } MonoDynamicAssembly;
200 MonoAssembly *assembly;
201 } MonoReflectionAssembly;
204 MonoReflectionAssembly assembly;
205 MonoDynamicAssembly *dynamic_assembly;
206 MonoReflectionMethodBuilder *entry_point;
209 } MonoReflectionAssemblyBuilder;
214 MonoReflectionType *type;
216 MonoObject *def_value;
219 } MonoReflectionFieldBuilder;
225 MonoReflectionType *type;
226 MonoArray *parameters;
227 MonoObject *def_value;
228 MonoReflectionMethodBuilder *set_method;
229 MonoReflectionMethodBuilder *get_method;
231 } MonoReflectionPropertyBuilder;
236 MonoObject *assembly;
239 MonoString *scopename;
240 } MonoReflectionModule;
243 MonoReflectionModule module;
246 } MonoReflectionModuleBuilder;
249 MonoReflectionType type;
252 MonoReflectionType *parent;
253 MonoArray *interfaces;
256 MonoArray *properties;
261 MonoReflectionModuleBuilder *module;
262 } MonoReflectionTypeBuilder;
267 MonoString *codebase;
269 } MonoReflectionAssemblyName;
272 char *nest_name_space;
277 int rank; /* we may need more info than this */
282 int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
284 int mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
285 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
286 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
287 guint32 mono_image_create_token (MonoReflectionAssemblyBuilder *assembly, MonoObject *obj);
289 MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
290 MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
291 MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method);
292 MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
293 MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
294 /* note: this one is slightly different: we keep the whole array of params in the cache */
295 MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
297 #endif /* __METADATA_REFLECTION_H__ */