This commit was manufactured by cvs2svn to create branch 'mono-1-0'.
[mono.git] / mono / metadata / reflection.h
index 36fb305813c52805fae5098930d1edd2835fb6d1..e44243f3d66fb35f154439d45368f09a063fc1fc 100644 (file)
@@ -1,382 +1,7 @@
 #ifndef __METADATA_REFLECTION_H__
 #define __METADATA_REFLECTION_H__
 
-#include <mono/metadata/image.h>
-#include <mono/metadata/metadata.h>
-#include <mono/metadata/class.h>
 #include <mono/metadata/object.h>
-#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 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;
-};
-
-typedef struct {
-       MonoObject object;
-       MonoObject *target_type;
-       MonoObject *target;
-       MonoString *method_name;
-       gpointer method_ptr;
-       gpointer delegate_trampoline;
-       MonoReflectionMethod *method_info;
-} MonoDelegate;
-
-typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
-struct _MonoMulticastDelegate {
-       MonoDelegate delegate;
-       MonoMulticastDelegate *prev;
-};
-
-typedef struct {
-       MonoObject object;
-       MonoClass *klass;
-       MonoClassField *field;
-} 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;
-} 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 {
-       MonoReflectionType *parent;
-       MonoReflectionType *type;
-       MonoString *name;
-       guint32 attrs;
-} MonoFieldInfo;
-
-typedef struct {
-       MonoString *name;
-       MonoString *name_space;
-       MonoReflectionType *parent;
-       MonoReflectionType *etype;
-       MonoReflectionAssembly *assembly;
-       guint32 attrs;
-       guint32 rank;
-       MonoBoolean isbyref, ispointer, isprimitive;
-} MonoTypeInfo;
-
-typedef struct {
-       MonoObject *member;
-       gint32 code_pos;
-} MonoReflectionILTokenInfo;
-
-typedef struct {
-       MonoObject object;
-       MonoArray *code;
-       MonoObject *mbuilder;
-       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;
-} 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;
-       MonoReflectionILGen *ilgen;
-       MonoArray *parameters;
-       guint32 attrs;
-       guint32 iattrs;
-       guint32 table_idx;
-       guint32 call_conv;
-       MonoObject *type;
-       MonoArray *pinfo;
-       MonoArray *cattrs;
-       MonoBoolean init_locals;
-} 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;
-} 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;
-       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;
-       GList *array_methods;
-       MonoGHashTable *token_fixups;
-       MonoDynamicStream pefile;
-       MonoDynamicStream sheap;
-       MonoDynamicStream code; /* used to store method headers and bytecode */
-       MonoDynamicStream us;
-       MonoDynamicStream blob;
-       MonoDynamicStream tstream;
-       MonoDynamicStream guid;
-       MonoDynamicTable tables [64];
-} MonoDynamicAssembly;
-
-typedef struct {
-       MonoReflectionAssembly assembly;
-       MonoDynamicAssembly *dynamic_assembly;
-       MonoReflectionMethodBuilder *entry_point;
-       MonoArray *modules;
-       MonoString *name;
-       MonoString *dir;
-       MonoArray *cattrs;
-} 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;
-} 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;
-       MonoObject *assembly;
-       MonoString *fqname;
-       MonoString *name;
-       MonoString *scopename;
-} MonoReflectionModule;
-
-typedef struct {
-       MonoReflectionModule module;
-       MonoArray *types;
-       MonoArray *cattrs;
-       MonoArray *guid;
-       guint32    table_idx;
-       MonoReflectionAssemblyBuilder *assemblyb;
-} MonoReflectionModuleBuilder;
-
-typedef struct {
-       MonoReflectionType type;
-       MonoString *name;
-       MonoString *nspace;
-       MonoReflectionType *parent;
-       MonoReflectionType *nesting_type;
-       MonoArray *interfaces;
-       MonoArray *methods;
-       MonoArray *ctors;
-       MonoArray *properties;
-       MonoArray *fields;
-       MonoArray *events;
-       MonoArray *cattrs;
-       MonoArray *subtypes;
-       guint32 attrs;
-       guint32 table_idx;
-       MonoReflectionModuleBuilder *module;
-       gint32 class_size;
-       gint32 packing_size;
-} MonoReflectionTypeBuilder;
-
-typedef struct {
-       MonoObject  obj;
-       MonoString *name;
-       MonoString *codebase;
-       gint32 major, minor, build, revision;
-       /* FIXME: add missing stuff */
-} 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 MonoTypeNameParse MonoTypeNameParse;
 
@@ -389,43 +14,56 @@ struct MonoTypeNameParse {
 };
 
 typedef struct {
-       MonoObject object;
-       MonoReflectionModuleBuilder *module;
-       MonoArray *arguments;
-       guint32 type;
-} MonoReflectionSigHelper;
+       MonoMethod *ctor;
+       guint32     data_size;
+       const guchar* data;
+} MonoCustomAttrEntry;
 
+typedef struct {
+       int num_attrs;
+       int cached;
+       MonoImage *image;
+       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;
 
-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);
-
-void          mono_image_create_pefile (MonoReflectionAssemblyBuilder *assembly);
-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);
+MonoType*     mono_reflection_type_from_name (char *name, MonoImage *image);
 
 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);
+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);
-
-void        mono_reflection_setup_internal_class  (MonoReflectionTypeBuilder *tb);
-
-void        mono_reflection_create_internal_class (MonoReflectionTypeBuilder *tb);
-
-MonoArray  *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
-
-MonoArray  *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
+MonoArray*  mono_reflection_get_custom_attrs_blob (MonoReflectionAssembly *assembly, MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *porpValues, MonoArray *fields, MonoArray* fieldValues);
+
+MonoArray*  mono_custom_attrs_construct (MonoCustomAttrInfo *cinfo);
+MonoCustomAttrInfo* mono_custom_attrs_from_index    (MonoImage *image, guint32 idx);
+MonoCustomAttrInfo* mono_custom_attrs_from_method   (MonoMethod *method);
+MonoCustomAttrInfo* mono_custom_attrs_from_class    (MonoClass *klass);
+MonoCustomAttrInfo* mono_custom_attrs_from_assembly (MonoAssembly *assembly);
+MonoCustomAttrInfo* mono_custom_attrs_from_property (MonoClass *klass, MonoProperty *property);
+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);
 
 #endif /* __METADATA_REFLECTION_H__ */