#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;
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;
guint32 AttrsImpl;
} MonoReflectionParameter;
+typedef struct {
+ MonoObject object;
+ MonoAssembly *assembly;
+} MonoReflectionAssembly;
+
typedef struct {
MonoReflectionType *utype;
MonoArray *values;
MonoString *name_space;
MonoReflectionType *parent;
MonoReflectionType *etype;
- MonoAssembly *assembly;
+ MonoReflectionAssembly *assembly;
guint32 attrs;
guint32 rank;
MonoBoolean isbyref, ispointer, isprimitive;
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;
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;
MonoReflectionModule module;
MonoArray *types;
MonoArray *cattrs;
+ MonoArray *guid;
guint32 table_idx;
MonoReflectionAssemblyBuilder *assemblyb;
} MonoReflectionModuleBuilder;
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);
/* 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__ */