Mon Mar 25 13:04:56 CET 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / reflection.h
index a39b034f9c49d10f862b48a1a64a727ce2328647..f54bb5b56b96a82c20c132f91b489f161dd5d5ee 100644 (file)
@@ -45,6 +45,21 @@ typedef struct {
        MonoMethod *method;
 } MonoReflectionMethod;
 
+typedef struct {
+       MonoObject object;
+       MonoObject *target_type;
+       MonoObject *target;
+       MonoString *method_name;
+       gpointer method_ptr;
+       MonoReflectionMethod *method_info;
+} MonoDelegate;
+
+typedef struct _MonoMulticastDelegate MonoMulticastDelegate;
+struct _MonoMulticastDelegate {
+       MonoDelegate delegate;
+       MonoMulticastDelegate *prev;
+};
+
 typedef struct {
        MonoObject object;
        MonoClass *klass;
@@ -57,6 +72,12 @@ typedef struct {
        MonoProperty *property;
 } MonoReflectionProperty;
 
+typedef struct {
+       MonoObject object;
+       MonoClass *klass;
+       MonoEvent *event;
+} MonoReflectionEvent;
+
 typedef struct {
        MonoObject object;
        MonoReflectionType *ClassImpl;
@@ -101,12 +122,17 @@ typedef struct {
        MonoString *name_space;
        MonoReflectionType *parent;
        MonoReflectionType *etype;
-       MonoArray *interfaces;
        MonoAssembly *assembly;
        guint32 attrs;
        guint32 rank;
+       MonoBoolean isbyref, ispointer, isprimitive;
 } MonoTypeInfo;
 
+typedef struct {
+       MonoObject *member;
+       gint32 code_pos;
+} MonoReflectionILTokenInfo;
+
 typedef struct {
        MonoObject object;
        MonoArray *code;
@@ -116,6 +142,8 @@ typedef struct {
        gint32 cur_stack;
        MonoArray *locals;
        MonoArray *ex_handlers;
+       gint32 num_token_fixups;
+       MonoArray *token_fixups;
 } MonoReflectionILGen;
 
 typedef struct {
@@ -190,6 +218,7 @@ typedef struct {
        guint32 text_rva;
        guint32 metadata_rva;
        GHashTable *typeref;
+       GHashTable *token_fixups;
        MonoStringHeap sheap;
        MonoDynamicStream code; /* used to store method headers and bytecode */
        MonoDynamicStream us;
@@ -266,6 +295,7 @@ typedef struct {
        MonoArray *ctors;
        MonoArray *properties;
        MonoArray *fields;
+       MonoArray *events;
        MonoArray *cattrs;
        MonoArray *subtypes;
        guint32 attrs;
@@ -282,6 +312,20 @@ typedef struct {
        MonoObject *version;
 } 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;
@@ -294,12 +338,20 @@ typedef struct {
        char *name_space;
        char *name;
        char *assembly;
-       int rank; /* we may need more info than this */
-       int isbyref;
-       int ispointer;
+       GList *modifiers; /* 0 -> byref, -1 -> pointer, > 0 -> array rank */
 } MonoTypeNameParse;
 
+typedef struct {
+       MonoObject object;
+       MonoReflectionModuleBuilder *module;
+       MonoArray *arguments;
+       guint32 type;
+} MonoReflectionSigHelper;
+
+
+
 int           mono_reflection_parse_type (char *name, MonoTypeNameParse *info);
+MonoType*     mono_reflection_get_type   (MonoImage* image, MonoTypeNameParse *info, gboolean ignorecase);
 
 int           mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
 void          mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
@@ -311,6 +363,7 @@ MonoReflectionType*     mono_type_get_object     (MonoDomain *domain, MonoType *
 MonoReflectionMethod*   mono_method_get_object   (MonoDomain *domain, MonoMethod *method);
 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);
 
@@ -326,5 +379,9 @@ MonoArray*  mono_reflection_get_custom_attrs_blob (MonoObject *ctor, MonoArray *
 
 void        mono_reflection_setup_internal_class (MonoReflectionTypeBuilder *tb);
 
+MonoArray  *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
+
+MonoArray  *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
+
 #endif /* __METADATA_REFLECTION_H__ */