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;
112 MonoObject *mbuilder;
117 } MonoReflectionILGen;
121 MonoReflectionType *type;
123 } MonoReflectionLocalBuilder;
127 MonoReflectionILGen *ilgen;
128 MonoArray *parameters;
134 } MonoReflectionCtorBuilder;
139 MonoReflectionType *rtype;
140 MonoArray *parameters;
146 MonoReflectionILGen *ilgen;
150 MonoString *dllentry;
154 } MonoReflectionMethodBuilder;
157 MonoAssembly assembly;
160 guint32 metadata_rva;
162 MonoStringHeap sheap;
163 MonoDynamicStream code; /* used to store method headers and bytecode */
164 MonoDynamicStream us;
165 MonoDynamicStream blob;
166 MonoDynamicStream tstream;
167 MonoDynamicStream guid;
168 MonoDynamicTable tables [64];
169 } MonoDynamicAssembly;
173 MonoAssembly *assembly;
174 } MonoReflectionAssembly;
177 MonoReflectionAssembly assembly;
178 MonoDynamicAssembly *dynamic_assembly;
179 MonoReflectionMethodBuilder *entry_point;
182 } MonoReflectionAssemblyBuilder;
187 MonoReflectionType *type;
189 MonoObject *def_value;
192 } MonoReflectionFieldBuilder;
198 MonoReflectionType *type;
199 MonoArray *parameters;
200 MonoObject *def_value;
201 MonoReflectionMethodBuilder *set_method;
202 MonoReflectionMethodBuilder *get_method;
204 } MonoReflectionPropertyBuilder;
209 MonoObject *assembly;
212 MonoString *scopename;
213 } MonoReflectionModule;
216 MonoReflectionModule module;
219 } MonoReflectionModuleBuilder;
222 MonoReflectionType type;
225 MonoReflectionType *parent;
226 MonoArray *interfaces;
229 MonoArray *properties;
233 MonoReflectionModuleBuilder *module;
234 } MonoReflectionTypeBuilder;
236 int mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
237 void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
238 guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
239 guint32 mono_image_create_token (MonoReflectionAssemblyBuilder *assembly, MonoObject *obj);
241 MonoReflectionAssembly* mono_assembly_get_object (MonoAssembly *assembly);
242 MonoReflectionType* mono_type_get_object (MonoType *type);
243 MonoReflectionMethod* mono_method_get_object (MonoMethod *method);
244 MonoReflectionField* mono_field_get_object (MonoClass *klass, MonoClassField *field);
245 MonoReflectionProperty* mono_property_get_object (MonoClass *klass, MonoProperty *property);
246 /* note: this one is slightly different: we keep the whole array of params in the cache */
247 MonoReflectionParameter** mono_param_get_objects (MonoMethod *method);
249 #endif /* __METADATA_REFLECTION_H__ */