2004-05-25 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mono / metadata / reflection.h
index 0a4a695c9b6d88315d2489462c27db001f1f1a19..d31deae81772b73955842cde8eb6c3a16d97c9d0 100644 (file)
@@ -86,6 +86,7 @@ typedef struct {
 typedef struct {
        MonoObject object;
        MonoAssembly *assembly;
+       MonoObject *resolve_event_holder;
 } MonoReflectionAssembly;
 
 typedef struct {
@@ -99,6 +100,7 @@ typedef struct {
        MonoReflectionType *ret;
        guint32 attrs;
        guint32 implattrs;
+       guint32 callconv;
 } MonoMethodInfo;
 
 typedef struct {
@@ -110,7 +112,8 @@ typedef struct {
 } MonoPropertyInfo;
 
 typedef struct {
-       MonoReflectionType *parent;
+       MonoReflectionType *declaring_type;
+       MonoReflectionType *reflected_type;
        MonoString *name;
        MonoReflectionMethod *add_method;
        MonoReflectionMethod *remove_method;
@@ -136,7 +139,6 @@ typedef struct {
 typedef struct {
        MonoObject object;
        MonoArray *code;
-       MonoObject *mbuilder;
        gint32 code_len;
        gint32 max_stack;
        gint32 cur_stack;
@@ -165,6 +167,7 @@ typedef struct {
        MonoObject object;
        MonoReflectionType *type;
        MonoString *name;
+       MonoBoolean is_pinned;
 } MonoReflectionLocalBuilder;
 
 typedef struct {
@@ -202,6 +205,9 @@ typedef struct {
        MonoArray *pinfo;
        MonoArray *cattrs;
        MonoBoolean init_locals;
+       MonoArray *param_modreq;
+       MonoArray *param_modopt;
+       MonoArray *permissions;
 } MonoReflectionCtorBuilder;
 
 typedef struct {
@@ -225,6 +231,12 @@ 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 {
@@ -247,6 +259,14 @@ enum {
 
 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;
@@ -262,6 +282,7 @@ typedef struct {
                guint32 offset;
                guint32 attrs;
        } sections [MONO_SECTION_MAX];
+       GHashTable *typespec;
        GHashTable *typeref;
        GHashTable *handleref;
        MonoGHashTable *tokens;
@@ -270,11 +291,13 @@ typedef struct {
        MonoGHashTable *token_fixups;
        MonoGHashTable *method_to_table_idx;
        MonoGHashTable *field_to_table_idx;
-       MonoGHashTable *param_marshalling;
+       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 */
@@ -284,25 +307,38 @@ typedef struct {
        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;
@@ -310,6 +346,8 @@ typedef struct {
        guint32 pekind;
        MonoBoolean delay_sign;
        guint32 access;
+       MonoArray *loaded_modules;
+       MonoArray *win32_resources;
 } MonoReflectionAssemblyBuilder;
 
 typedef struct {
@@ -325,6 +363,8 @@ typedef struct {
        MonoArray *cattrs;
        MonoReflectionMarshal *marshal_info;
        MonoClassField *handle;
+       MonoArray *modreq;
+       MonoArray *modopt;
 } MonoReflectionFieldBuilder;
 
 typedef struct {
@@ -352,6 +392,8 @@ typedef struct {
 
 typedef struct {
        MonoReflectionModule module;
+       MonoDynamicImage *dynamic_image;
+       gint32     num_types;
        MonoArray *types;
        MonoArray *cattrs;
        MonoArray *guid;
@@ -359,6 +401,8 @@ typedef struct {
        MonoReflectionAssemblyBuilder *assemblyb;
        MonoArray *global_methods;
        MonoArray *global_fields;
+       gboolean is_main;
+       MonoArray *resources;
 } MonoReflectionModuleBuilder;
 
 typedef struct {
@@ -368,9 +412,11 @@ 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;
@@ -381,17 +427,29 @@ typedef struct {
        gint32 class_size;
        gint32 packing_size;
        MonoArray *generic_params;
+       MonoArray *permissions;
 } MonoReflectionTypeBuilder;
 
 typedef struct {
-       MonoObject obj;
-       MonoGenericParam *param;
-       MonoReflectionType *type;
+       MonoReflectionType type;
+       MonoReflectionTypeBuilder *tbuilder;
+       MonoReflectionMethodBuilder *mbuilder;
        MonoString *name;
-       guint32 flags;
-       MonoArray *constraints;
+       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;
@@ -404,8 +462,8 @@ typedef struct {
        StrongNameKeyPair keypair;
        AssemblyVersionCompatibility versioncompat;*/
        MonoObject  *cultureInfo;
-       MonoObject  *flags;
-       MonoObject  *hashalg;
+       guint32     flags;
+       guint32     hashalg;
        MonoObject  *keypair;
        MonoArray   *publicKey;
        MonoArray   *keyToken;
@@ -432,6 +490,22 @@ typedef struct {
        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 {
@@ -464,6 +538,16 @@ typedef struct {
        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,
@@ -481,10 +565,11 @@ 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);
@@ -520,7 +605,19 @@ void        mono_reflection_setup_generic_class   (MonoReflectionTypeBuilder *tb
 
 MonoReflectionType* mono_reflection_create_runtime_class  (MonoReflectionTypeBuilder *tb);
 
-MonoReflectionType* mono_reflection_define_generic_parameter (MonoReflectionTypeBuilder *tb, MonoReflectionGenericParam *gparam);
+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);
 
@@ -530,7 +627,7 @@ gpointer
 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__ */