Wed Apr 17 14:14:36 CEST 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / reflection.h
index 93361e2d39f4a899e6eace04aa4a1882aad606fe..e93430912d23eada684ea653ca24eb1827319675 100644 (file)
@@ -5,9 +5,10 @@
 #include <mono/metadata/metadata.h>
 #include <mono/metadata/class.h>
 #include <mono/metadata/object.h>
+#include <mono/utils/mono-hash.h>
 
 typedef struct {
-       char *name;
+       GHashTable *hash;
        char *data;
        guint32 alloc_size; /* malloced bytes */
        guint32 index;
@@ -23,27 +24,30 @@ typedef struct {
        guint32 next_idx;
 } MonoDynamicTable;
 
-typedef struct {
-       GHashTable *hash;
-       char *data;
-       guint32 index;
-       guint32 alloc_size;
-       guint32 offset; /* from start of metadata */
-} MonoStringHeap;
-
 /*
  * The followinbg structure must match the C# implementation in our corlib.
  */
 
-typedef struct {
+struct _MonoReflectionMethod {
        MonoObject object;
-       MonoType  *type;
-} MonoReflectionType;
+       MonoMethod *method;
+};
 
 typedef struct {
        MonoObject object;
-       MonoMethod *method;
-} MonoReflectionMethod;
+       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;
@@ -73,6 +77,11 @@ typedef struct {
        guint32 AttrsImpl;
 } MonoReflectionParameter;
 
+typedef struct {
+       MonoObject object;
+       MonoAssembly *assembly;
+} MonoReflectionAssembly;
+
 typedef struct {
        MonoReflectionType *utype;
        MonoArray *values;
@@ -107,7 +116,7 @@ typedef struct {
        MonoString *name_space;
        MonoReflectionType *parent;
        MonoReflectionType *etype;
-       MonoAssembly *assembly;
+       MonoReflectionAssembly *assembly;
        guint32 attrs;
        guint32 rank;
        MonoBoolean isbyref, ispointer, isprimitive;
@@ -203,8 +212,9 @@ typedef struct {
        guint32 text_rva;
        guint32 metadata_rva;
        GHashTable *typeref;
-       GHashTable *token_fixups;
-       MonoStringHeap sheap;
+       GHashTable *handleref;
+       MonoGHashTable *token_fixups;
+       MonoDynamicStream sheap;
        MonoDynamicStream code; /* used to store method headers and bytecode */
        MonoDynamicStream us;
        MonoDynamicStream blob;
@@ -213,17 +223,13 @@ typedef struct {
        MonoDynamicTable tables [64];
 } MonoDynamicAssembly;
 
-typedef struct {
-       MonoObject object;
-       MonoAssembly *assembly;
-} MonoReflectionAssembly;
-
 typedef struct {
        MonoReflectionAssembly assembly;
        MonoDynamicAssembly *dynamic_assembly;
        MonoReflectionMethodBuilder *entry_point;
        MonoArray *modules;
        MonoString *name;
+       MonoString *dir;
        MonoArray *cattrs;
 } MonoReflectionAssemblyBuilder;
 
@@ -266,6 +272,7 @@ typedef struct {
        MonoReflectionModule module;
        MonoArray *types;
        MonoArray *cattrs;
+       MonoArray *guid;
        guint32    table_idx;
        MonoReflectionAssemblyBuilder *assemblyb;
 } MonoReflectionModuleBuilder;
@@ -323,12 +330,21 @@ 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;
+
+
+
+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);
 
 int           mono_image_get_header (MonoReflectionAssemblyBuilder *assembly, char *buffer, int maxsize);
 void          mono_image_basic_init (MonoReflectionAssemblyBuilder *assembly);
@@ -344,17 +360,14 @@ MonoReflectionEvent*    mono_event_get_object    (MonoDomain *domain, MonoClass
 /* 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);
 
-
-typedef MonoObject* (*MonoInvokeFunc) (MonoMethod *method, void *obj, void **params);
-
-extern MonoInvokeFunc mono_default_runtime_invoke;
-
-void        mono_install_runtime_invoke (MonoInvokeFunc func);
-MonoObject* mono_runtime_invoke         (MonoMethod *method, void *obj, void **params);
 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);
 
+MonoArray  *mono_reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig);
+
+MonoArray  *mono_reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig);
+
 #endif /* __METADATA_REFLECTION_H__ */