-#include <mono/utils/mono-hash.h>
-
-typedef struct {
- GHashTable *hash;
- char *data;
- guint32 alloc_size; /* malloced bytes */
- guint32 index;
- guint32 offset; /* from start of metadata */
-} MonoDynamicStream;
-
-typedef struct {
- guint32 alloc_rows;
- guint32 rows;
- guint32 row_size; /* calculated later with column_sizes */
- guint32 columns;
- guint32 column_sizes [9];
- guint32 *values; /* rows * columns */
- guint32 next_idx;
-} MonoDynamicTable;
-
-/*
- * The followinbg structure must match the C# implementation in our corlib.
- */
-
-struct _MonoReflectionMethod {
- MonoObject object;
- MonoMethod *method;
- MonoString *name;
- MonoReflectionType *reftype;
-};
-
-struct _MonoDelegate {
- MonoObject object;
- MonoObject *target_type;
- MonoObject *target;
- MonoString *method_name;
- gpointer method_ptr;
- gpointer delegate_trampoline;
- MonoReflectionMethod *method_info;
-};
-
-typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
-struct _MonoMulticastDelegate {
- MonoDelegate delegate;
- MonoMulticastDelegate *prev;
-};
-
-typedef struct {
- MonoObject object;
- MonoClass *klass;
- MonoClassField *field;
- MonoString *name;
- MonoReflectionType *type;
- guint32 attrs;
-} MonoReflectionField;
-
-typedef struct {
- MonoObject object;
- MonoClass *klass;
- MonoProperty *property;
-} MonoReflectionProperty;
-
-typedef struct {
- MonoObject object;
- MonoClass *klass;
- MonoEvent *event;
-} MonoReflectionEvent;
-
-typedef struct {
- MonoObject object;
- MonoReflectionType *ClassImpl;
- MonoObject *DefaultValueImpl;
- MonoObject *MemberImpl;
- MonoString *NameImpl;
- gint32 PositionImpl;
- guint32 AttrsImpl;
-} MonoReflectionParameter;
-
-typedef struct {
- MonoObject object;
- MonoAssembly *assembly;
-} MonoReflectionAssembly;
-
-typedef struct {
- MonoReflectionType *utype;
- MonoArray *values;
- MonoArray *names;
-} MonoEnumInfo;
-
-typedef struct {
- MonoReflectionType *parent;
- MonoReflectionType *ret;
- guint32 attrs;
- guint32 implattrs;
- guint32 callconv;
-} MonoMethodInfo;
-
-typedef struct {
- MonoReflectionType *parent;
- MonoString *name;
- MonoReflectionMethod *get;
- MonoReflectionMethod *set;
- guint32 attrs;
-} MonoPropertyInfo;
-
-typedef struct {
- MonoReflectionType *parent;
- MonoString *name;
- MonoReflectionMethod *add_method;
- MonoReflectionMethod *remove_method;
- MonoReflectionMethod *raise_method;
- guint32 attrs;
-} MonoEventInfo;
-
-typedef struct {
- MonoString *name;
- MonoString *name_space;
- MonoReflectionType *etype;
- MonoReflectionType *nested_in;
- MonoReflectionAssembly *assembly;
- guint32 rank;
- MonoBoolean isprimitive;
-} MonoTypeInfo;
-
-typedef struct {
- MonoObject *member;
- gint32 code_pos;
-} MonoReflectionILTokenInfo;
-
-typedef struct {
- MonoObject object;
- MonoArray *code;
- gint32 code_len;
- gint32 max_stack;
- gint32 cur_stack;
- MonoArray *locals;
- MonoArray *ex_handlers;
- gint32 num_token_fixups;
- MonoArray *token_fixups;
-} MonoReflectionILGen;
-
-typedef struct {
- MonoArray *handlers;
- gint32 start;
- gint32 len;
- gint32 label;
-} MonoILExceptionInfo;
-
-typedef struct {
- MonoReflectionType *extype;
- gint32 type;
- gint32 start;
- gint32 len;
- gint32 filter_offset;
-} MonoILExceptionBlock;
-
-typedef struct {
- MonoObject object;
- MonoReflectionType *type;
- MonoString *name;
-} MonoReflectionLocalBuilder;
-
-typedef struct {
- MonoObject object;
- gint32 count;
- gint32 type;
- gint32 eltype;
- MonoString *guid;
- MonoString *mcookie;
- MonoString *marshaltype;
- MonoReflectionType *marshaltyperef;
-} MonoReflectionMarshal;
-
-typedef struct {
- MonoObject object;
- MonoObject* methodb;
- MonoString *name;
- MonoArray *cattrs;
- MonoReflectionMarshal *marshal_info;
- guint32 attrs;
- int position;
- guint32 table_idx;
-} MonoReflectionParamBuilder;
-
-typedef struct {
- MonoObject object;
- MonoMethod *mhandle;
- MonoReflectionILGen *ilgen;
- MonoArray *parameters;
- guint32 attrs;
- guint32 iattrs;
- guint32 table_idx;
- guint32 call_conv;
- MonoObject *type;
- MonoArray *pinfo;
- MonoArray *cattrs;
- MonoBoolean init_locals;
- MonoArray *param_modreq;
- MonoArray *param_modopt;
- MonoArray *permissions;
-} MonoReflectionCtorBuilder;
-
-typedef struct {
- MonoObject object;
- MonoMethod *mhandle;
- MonoReflectionType *rtype;
- MonoArray *parameters;
- guint32 attrs;
- guint32 iattrs;
- MonoString *name;
- guint32 table_idx;
- MonoArray *code;
- MonoReflectionILGen *ilgen;
- MonoObject *type;
- MonoArray *pinfo;
- MonoArray *cattrs;
- MonoReflectionMethod *override_method;
- MonoString *dll;
- MonoString *dllentry;
- guint32 charset;
- 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 {
- MonoObject object;
- MonoMethod *mhandle;
- MonoReflectionType *parent;
- MonoReflectionType *ret;
- MonoArray *parameters;
- MonoString *name;
- guint32 table_idx;
- guint32 call_conv;
-} MonoReflectionArrayMethod;
-
-enum {
- MONO_SECTION_TEXT,
- MONO_SECTION_RSRC,
- MONO_SECTION_RELOC,
- MONO_SECTION_MAX
-};
-
-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 image_base;
- guint32 cli_header_offset;
- guint32 iat_offset;
- guint32 idt_offset;
- guint32 ilt_offset;
- guint32 imp_names_offset;
- struct {
- guint32 rva;
- guint32 size;
- guint32 offset;
- guint32 attrs;
- } sections [MONO_SECTION_MAX];
- GHashTable *typeref;
- GHashTable *handleref;
- MonoGHashTable *tokens;
- 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 resources; /* managed embedded resources */
- MonoDynamicStream us;
- MonoDynamicStream blob;
- MonoDynamicStream tstream;
- MonoDynamicStream guid;
- MonoDynamicTable tables [64];
-} 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;
- MonoReflectionMethod *entry_point;
- MonoArray *modules;
- MonoString *name;
- MonoString *dir;
- MonoArray *cattrs;
- MonoArray *resources;
- MonoArray *public_key;
- MonoString *version;
- MonoString *culture;
- guint32 algid;
- guint32 flags;
- guint32 pekind;
- MonoBoolean delay_sign;
- guint32 access;
- MonoArray *loaded_modules;
- MonoArray *win32_resources;
-} MonoReflectionAssemblyBuilder;
-
-typedef struct {
- MonoObject object;
- guint32 attrs;
- MonoReflectionType *type;
- MonoString *name;
- MonoObject *def_value;
- gint32 offset;
- gint32 table_idx;
- MonoReflectionType *typeb;
- MonoArray *rva_data;
- MonoArray *cattrs;
- MonoReflectionMarshal *marshal_info;
- MonoClassField *handle;
- MonoArray *modreq;
- MonoArray *modopt;
-} MonoReflectionFieldBuilder;
-
-typedef struct {
- MonoObject object;
- guint32 attrs;
- MonoString *name;
- MonoReflectionType *type;
- MonoArray *parameters;
- MonoArray *cattrs;
- MonoObject *def_value;
- MonoReflectionMethodBuilder *set_method;
- MonoReflectionMethodBuilder *get_method;
- gint32 table_idx;
-} MonoReflectionPropertyBuilder;
-
-typedef struct {
- MonoObject obj;
- MonoImage *image;
- MonoReflectionAssembly *assembly;
- 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;
- guint32 table_idx;
- MonoReflectionAssemblyBuilder *assemblyb;
- MonoArray *global_methods;
- MonoArray *global_fields;
- gboolean is_main;
- MonoArray *resources;
-} MonoReflectionModuleBuilder;
-
-typedef struct {
- MonoReflectionType type;
- MonoString *name;
- MonoString *nspace;
- 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;
- MonoArray *subtypes;
- guint32 attrs;
- guint32 table_idx;
- MonoReflectionModuleBuilder *module;
- gint32 class_size;
- gint32 packing_size;
- MonoArray *generic_params;
- MonoArray *permissions;
-} MonoReflectionTypeBuilder;
-
-typedef struct {
- MonoReflectionType type;
- MonoObject *refobj;
- guint32 index;
- MonoString *name;
- guint32 flags;
- MonoArray *constraints;
- guint32 initialized;
-} MonoReflectionGenericParam;
-
-typedef struct _MonoReflectionGenericInst MonoReflectionGenericInst;
-struct _MonoReflectionGenericInst {
- MonoReflectionType type;
- MonoReflectionType *generic_type;
- MonoArray *methods;
- MonoArray *ctors;
- MonoArray *fields;
-};
-
-typedef struct {
- MonoReflectionMethod rmethod;
- MonoGenericMethod *gmethod;
-} MonoReflectionInflatedMethod;
-
-typedef struct {
- MonoReflectionField rfield;
- MonoClassField *declaring;
- MonoReflectionGenericInst *declaring_type;
- MonoReflectionGenericInst *reflected_type;
-} MonoReflectionInflatedField;
-
-typedef struct {
- MonoObject obj;
- MonoString *name;
- MonoString *codebase;
- gint32 major, minor, build, revision;
- /* FIXME: add missing stuff */
-/* CultureInfo cultureinfo;
- AssemblyNameFlags flags;
- AssemblyHashAlgorithm hashalg;
- StrongNameKeyPair keypair;
- AssemblyVersionCompatibility versioncompat;*/
- MonoObject *cultureInfo;
- guint32 flags;
- guint32 hashalg;
- MonoObject *keypair;
- MonoArray *publicKey;
- MonoArray *keyToken;
- MonoObject *versioncompat;
-} MonoReflectionAssemblyName;
-
-typedef struct {
- MonoObject obj;
- MonoString *name;
- MonoReflectionType *type;
- MonoReflectionTypeBuilder *typeb;
- MonoArray *cattrs;
- MonoReflectionMethodBuilder *add_method;
- MonoReflectionMethodBuilder *remove_method;
- MonoReflectionMethodBuilder *raise_method;
- MonoArray *other_methods;
- guint32 attrs;
- guint32 table_idx;
-} MonoReflectionEventBuilder;
-
-typedef struct {
- MonoObject obj;
- MonoReflectionMethod *ctor;
- 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;