MonoObject object;
MonoClass *klass;
MonoClassField *field;
+ MonoString *name;
+ MonoReflectionType *type;
+ guint32 attrs;
} MonoReflectionField;
typedef struct {
typedef struct {
MonoObject object;
MonoAssembly *assembly;
+ MonoObject *resolve_event_holder;
} MonoReflectionAssembly;
typedef struct {
MonoReflectionType *ret;
guint32 attrs;
guint32 implattrs;
+ guint32 callconv;
} MonoMethodInfo;
typedef struct {
} MonoPropertyInfo;
typedef struct {
- MonoReflectionType *parent;
+ MonoReflectionType *declaring_type;
+ MonoReflectionType *reflected_type;
MonoString *name;
MonoReflectionMethod *add_method;
MonoReflectionMethod *remove_method;
guint32 attrs;
} MonoEventInfo;
-typedef struct {
- MonoReflectionType *parent;
- MonoReflectionType *type;
- MonoString *name;
- guint32 attrs;
-} MonoFieldInfo;
-
typedef struct {
MonoString *name;
MonoString *name_space;
typedef struct {
MonoObject object;
MonoArray *code;
- MonoObject *mbuilder;
gint32 code_len;
gint32 max_stack;
gint32 cur_stack;
MonoObject object;
MonoReflectionType *type;
MonoString *name;
+ MonoBoolean is_pinned;
} MonoReflectionLocalBuilder;
typedef struct {
gint32 count;
gint32 type;
gint32 eltype;
+ MonoString *guid;
+ MonoString *mcookie;
+ MonoString *marshaltype;
+ MonoReflectionType *marshaltyperef;
} MonoReflectionMarshal;
typedef struct {
MonoArray *pinfo;
MonoArray *cattrs;
MonoBoolean init_locals;
+ MonoArray *param_modreq;
+ MonoArray *param_modopt;
+ MonoArray *permissions;
} MonoReflectionCtorBuilder;
typedef struct {
guint32 native_cc;
guint32 call_conv;
MonoBoolean init_locals;
+ MonoArray *generic_params;
+ MonoArray *return_modreq;
+ MonoArray *return_modopt;
+ MonoArray *param_modreq;
+ MonoArray *param_modopt;
+ MonoArray *permissions;
} MonoReflectionMethodBuilder;
typedef struct {
typedef struct {
MonoAssembly assembly;
+ gboolean run;
+ gboolean save;
+ char *strong_name;
+ guint32 strong_name_size;
+} MonoDynamicAssembly;
+
+typedef struct {
+ MonoImage image;
guint32 meta_size;
guint32 text_rva;
guint32 metadata_rva;
guint32 offset;
guint32 attrs;
} sections [MONO_SECTION_MAX];
+ GHashTable *typespec;
GHashTable *typeref;
GHashTable *handleref;
MonoGHashTable *tokens;
- GHashTable *blob_cache;
+ MonoGHashTable *blob_cache;
GList *array_methods;
MonoGHashTable *token_fixups;
MonoGHashTable *method_to_table_idx;
MonoGHashTable *field_to_table_idx;
+ MonoGHashTable *method_aux_hash;
gboolean run;
gboolean save;
char *strong_name;
guint32 strong_name_size;
+ char *win32_res;
+ guint32 win32_res_size;
MonoDynamicStream pefile;
MonoDynamicStream sheap;
MonoDynamicStream code; /* used to store method headers and bytecode */
MonoDynamicStream tstream;
MonoDynamicStream guid;
MonoDynamicTable tables [64];
-} MonoDynamicAssembly;
+} MonoDynamicImage;
typedef struct {
MonoArray *data;
MonoString *name;
MonoString *filename;
guint32 attrs;
+ guint32 offset;
} MonoReflectionResource;
+typedef struct {
+ guint32 res_type;
+ guint32 res_id;
+ guint32 lang_id;
+ MonoArray *res_data;
+} MonoReflectionWin32Resource;
+
+typedef struct {
+ guint32 action;
+ MonoString *pset;
+} MonoReflectionPermissionSet;
+
typedef struct {
MonoReflectionAssembly assembly;
MonoDynamicAssembly *dynamic_assembly;
- MonoReflectionMethodBuilder *entry_point;
+ MonoReflectionMethod *entry_point;
MonoArray *modules;
MonoString *name;
MonoString *dir;
MonoArray *cattrs;
MonoArray *resources;
- MonoString *keyfile;
+ MonoArray *public_key;
MonoString *version;
MonoString *culture;
guint32 algid;
guint32 pekind;
MonoBoolean delay_sign;
guint32 access;
+ MonoArray *loaded_modules;
+ MonoArray *win32_resources;
} MonoReflectionAssemblyBuilder;
typedef struct {
MonoArray *cattrs;
MonoReflectionMarshal *marshal_info;
MonoClassField *handle;
+ MonoArray *modreq;
+ MonoArray *modopt;
} MonoReflectionFieldBuilder;
typedef struct {
MonoString *fqname;
MonoString *name;
MonoString *scopename;
+ MonoBoolean is_resource;
} MonoReflectionModule;
typedef struct {
MonoReflectionModule module;
+ MonoDynamicImage *dynamic_image;
+ gint32 num_types;
MonoArray *types;
MonoArray *cattrs;
MonoArray *guid;
MonoReflectionAssemblyBuilder *assemblyb;
MonoArray *global_methods;
MonoArray *global_fields;
+ gboolean is_main;
+ MonoArray *resources;
} MonoReflectionModuleBuilder;
typedef struct {
MonoReflectionType *parent;
MonoReflectionType *nesting_type;
MonoArray *interfaces;
+ gint32 num_methods;
MonoArray *methods;
MonoArray *ctors;
MonoArray *properties;
+ gint32 num_fields;
MonoArray *fields;
MonoArray *events;
MonoArray *cattrs;
MonoReflectionModuleBuilder *module;
gint32 class_size;
gint32 packing_size;
+ MonoArray *generic_params;
+ MonoArray *permissions;
} MonoReflectionTypeBuilder;
+typedef struct {
+ MonoReflectionType type;
+ MonoReflectionTypeBuilder *tbuilder;
+ MonoReflectionMethodBuilder *mbuilder;
+ MonoString *name;
+ guint32 index;
+ MonoReflectionType *base_type;
+ MonoArray *iface_constraints;
+ MonoBoolean has_ctor_constraint;
+ MonoBoolean has_reference_type;
+ MonoBoolean has_value_type;
+} MonoReflectionGenericParam;
+
+typedef struct _MonoReflectionGenericInst MonoReflectionGenericInst;
+struct _MonoReflectionGenericInst {
+ MonoReflectionType type;
+ MonoReflectionType *generic_type;
+ guint32 initialized;
+};
+
typedef struct {
MonoObject obj;
MonoString *name;
StrongNameKeyPair keypair;
AssemblyVersionCompatibility versioncompat;*/
MonoObject *cultureInfo;
- MonoObject *flags;
- MonoObject *hashalg;
+ guint32 flags;
+ guint32 hashalg;
MonoObject *keypair;
MonoArray *publicKey;
MonoArray *keyToken;
MonoArray *data;
} MonoReflectionCustomAttr;
+typedef struct {
+ MonoObject object;
+ MonoMethod *mhandle;
+ MonoString *name;
+ MonoReflectionType *rtype;
+ MonoArray *parameters;
+ guint32 attrs;
+ guint32 call_conv;
+ MonoReflectionModule *module;
+ MonoBoolean skip_visibility;
+ MonoBoolean init_locals;
+ MonoReflectionILGen *ilgen;
+ gint32 nrefs;
+ MonoArray *refs;
+} MonoReflectionDynamicMethod;
+
typedef struct MonoTypeNameParse MonoTypeNameParse;
struct MonoTypeNameParse {
MonoCustomAttrEntry attrs [MONO_ZERO_LEN_ARRAY];
} MonoCustomAttrInfo;
+/*
+ * Information which isn't in the MonoMethod structure is stored here for
+ * dynamic methods.
+ */
+typedef struct {
+ char **param_names;
+ MonoMarshalSpec **param_marshall;
+ MonoCustomAttrInfo **param_cattr;
+} MonoReflectionMethodAux;
+
+enum {
+ RESOURCE_LOCATION_EMBEDDED = 1,
+ RESOURCE_LOCATION_ANOTHER_ASSEMBLY = 2,
+ RESOURCE_LOCATION_IN_MANIFEST = 4
+};
+
+typedef struct {
+ MonoObject object;
+ MonoReflectionAssembly *assembly;
+ MonoString *filename;
+ guint32 location;
+} MonoManifestResourceInfo;
-char* mono_type_get_name (MonoType *type);
int mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
MonoType* mono_reflection_get_type (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase);
MonoType* mono_reflection_type_from_name (char *name, MonoImage *image);
-void mono_image_create_pefile (MonoReflectionAssemblyBuilder *assembly);
+void mono_image_create_pefile (MonoReflectionModuleBuilder *module);
void mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
-guint32 mono_image_insert_string (MonoReflectionAssemblyBuilder *assembly, MonoString *str);
-guint32 mono_image_create_token (MonoDynamicAssembly *assembly, MonoObject *obj);
+MonoReflectionModule * mono_image_load_module (MonoReflectionAssemblyBuilder *assembly, MonoString *file_name);
+guint32 mono_image_insert_string (MonoReflectionModuleBuilder *module, MonoString *str);
+guint32 mono_image_create_token (MonoDynamicImage *assembly, MonoObject *obj);
void mono_image_module_basic_init (MonoReflectionModuleBuilder *module);
MonoReflectionAssembly* mono_assembly_get_object (MonoDomain *domain, MonoAssembly *assembly);
MonoReflectionModule* mono_module_get_object (MonoDomain *domain, MonoImage *image);
+MonoReflectionModule* mono_module_file_get_object (MonoDomain *domain, MonoImage *image, int table_index);
MonoReflectionType* mono_type_get_object (MonoDomain *domain, MonoType *type);
MonoReflectionMethod* mono_method_get_object (MonoDomain *domain, MonoMethod *method, MonoClass *refclass);
MonoReflectionField* mono_field_get_object (MonoDomain *domain, MonoClass *klass, MonoClassField *field);
MonoReflectionProperty* mono_property_get_object (MonoDomain *domain, MonoClass *klass, MonoProperty *property);
MonoReflectionEvent* mono_event_get_object (MonoDomain *domain, MonoClass *klass, MonoEvent *event);
/* note: this one is slightly different: we keep the whole array of params in the cache */
-MonoReflectionParameter** mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
+MonoArray* mono_param_get_objects (MonoDomain *domain, MonoMethod *method);
MonoArray* mono_reflection_get_custom_attrs (MonoObject *obj);
MonoArray* mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
MonoCustomAttrInfo* mono_custom_attrs_from_event (MonoClass *klass, MonoEvent *event);
MonoCustomAttrInfo* mono_custom_attrs_from_field (MonoClass *klass, MonoClassField *field);
MonoCustomAttrInfo* mono_custom_attrs_from_param (MonoMethod *method, guint32 param);
+void mono_custom_attrs_free (MonoCustomAttrInfo *ainfo);
void mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
void mono_reflection_create_internal_class (MonoReflectionTypeBuilder *tb);
+void mono_reflection_setup_generic_class (MonoReflectionTypeBuilder *tb);
+
MonoReflectionType* mono_reflection_create_runtime_class (MonoReflectionTypeBuilder *tb);
+void mono_reflection_create_dynamic_method (MonoReflectionDynamicMethod *m);
+
+void mono_reflection_initialize_generic_parameter (MonoReflectionGenericParam *gparam);
+
+MonoType*
+mono_reflection_bind_generic_parameters (MonoReflectionType *type, int type_argc, MonoType **types);
+MonoReflectionMethod*
+mono_reflection_bind_generic_method_parameters (MonoReflectionMethod *method, MonoArray *types);
+void
+mono_reflection_generic_inst_initialize (MonoReflectionGenericInst *type, MonoArray *methods, MonoArray *ctors, MonoArray *fields, MonoArray *properties, MonoArray *events);
+MonoReflectionEvent *
+mono_reflection_event_builder_get_event_info (MonoReflectionTypeBuilder *tb, MonoReflectionEventBuilder *eb);
+
+
MonoArray *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
MonoArray *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
mono_reflection_lookup_dynamic_token (MonoImage *image, guint32 token);
void
-mono_image_build_metadata (MonoReflectionAssemblyBuilder *assemblyb);
+mono_image_build_metadata (MonoReflectionModuleBuilder *module);
#endif /* __METADATA_REFLECTION_H__ */