Tue May 13 16:41:49 CEST 2003 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / loader.h
index bd29f5f74d466b7b5a1d9a6ee19da7d182ffbddf..74e1a353475f4061dffe31691479c95326f9656a 100644 (file)
@@ -4,16 +4,41 @@
 #include <mono/metadata/metadata.h>
 #include <mono/metadata/image.h>
 
+typedef enum {
+       MONO_WRAPPER_NONE,
+       MONO_WRAPPER_DELEGATE_INVOKE,
+       MONO_WRAPPER_DELEGATE_BEGIN_INVOKE,
+       MONO_WRAPPER_DELEGATE_END_INVOKE,
+       MONO_WRAPPER_RUNTIME_INVOKE,
+       MONO_WRAPPER_NATIVE_TO_MANAGED,
+       MONO_WRAPPER_MANAGED_TO_NATIVE,
+       MONO_WRAPPER_REMOTING_INVOKE,
+       MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK,
+       MONO_WRAPPER_LDFLD,
+       MONO_WRAPPER_STFLD,
+       MONO_WRAPPER_SYNCHRONIZED,
+       MONO_WRAPPER_UNKNOWN
+} MonoWrapperType;
+
 typedef struct {
        guint16 flags;  /* method flags */
        guint16 iflags; /* method implementation flags */
+       guint32 token;
        MonoClass *klass;
        MonoMethodSignature *signature;
        gpointer addr;
        gpointer info; /* runtime info */
+       gpointer remoting_tramp; 
        gint slot;
        /* name is useful mostly for debugging */
-       const char *name; 
+       const char *name;
+       /* this is used by the inlining algorithm */
+       unsigned int inline_info:1;
+       unsigned int uses_this:1;
+       MonoWrapperType wrapper_type:4;
+       unsigned int string_ctor:1;
+       unsigned int save_lmf:1;
+       gint16 inline_count;
 } MonoMethod;
 
 typedef struct {
@@ -21,10 +46,17 @@ typedef struct {
        MonoMethodHeader *header;
 } MonoMethodNormal;
 
+typedef struct {
+       MonoMethodNormal method;
+       GList *data;
+} MonoMethodWrapper;
+
 typedef struct {
        MonoMethod method;
+       void  (*code) (void);
+       /* add marshal info */
        guint16 piflags;  /* pinvoke flags */
-       void  (*code) ();
+       guint16 implmap_idx;  /* index into IMPLMAP */
 } MonoMethodPInvoke;
 
 typedef struct {
@@ -48,6 +80,7 @@ typedef struct {
        MonoClass *string_class;
        MonoClass *enum_class;
        MonoClass *array_class;
+       MonoClass *delegate_class;
        MonoClass *multicastdelegate_class;
        MonoClass *asyncresult_class;
        MonoClass *waithandle_class;
@@ -56,10 +89,32 @@ typedef struct {
        MonoClass *methodhandle_class;
        MonoClass *monotype_class;
        MonoClass *exception_class;
+       MonoClass *threadabortexception_class;
+       MonoClass *thread_class;
+       MonoClass *transparent_proxy_class;
+       MonoClass *real_proxy_class;
+       MonoClass *mono_method_message_class;
+       MonoClass *appdomain_class;
+       MonoClass *field_info_class;
+       MonoClass *method_info_class;
+       MonoClass *stringbuilder_class;
+       MonoClass *math_class;
+       MonoClass *stack_frame_class;
+       MonoClass *stack_trace_class;
+       MonoClass *marshal_class;
+       MonoClass *iserializeable_class;
+       MonoClass *serializationinfo_class;
+       MonoClass *streamingcontext_class;
+       MonoClass *typed_reference_class;
+       MonoClass *marshalbyrefobject_class;
+       MonoClass *monitor_class;
 } MonoDefaults;
 
 extern MonoDefaults mono_defaults;
 
+typedef gboolean (*MonoStackWalk)     (MonoMethod *method, gint32 native_offset, gint32 il_offset, gboolean managed, gpointer data);
+typedef void     (*MonoStackWalkImpl) (MonoStackWalk func, gpointer user_data);
+
 void 
 mono_init_icall            (void);
 
@@ -70,15 +125,39 @@ void
 mono_free_method           (MonoMethod *method);
 
 MonoImage *
-mono_load_image            (const char *fname, enum MonoImageOpenStatus *status);
+mono_load_image            (const char *fname, MonoImageOpenStatus *status);
+
+void
+mono_add_internal_call     (const char *name, gconstpointer method);
+
+gpointer
+mono_lookup_internal_call (MonoMethod *method);
+
+int 
+mono_dllmap_lookup (const char *dll, const char* func, const char **rdll, const char **rfunc);
 
 void
-mono_add_internal_call     (const char *name, gpointer method);
+mono_dllmap_insert (const char *dll, const char *func, const char *tdll, const char *tfunc);
 
 gpointer
-mono_lookup_internal_call  (const char *name);
+mono_lookup_pinvoke_call (MonoMethod *method);
 
 void
 mono_method_get_param_names (MonoMethod *method, const char **names);
 
+void
+mono_method_get_marshal_info (MonoMethod *method, MonoMarshalSpec **mspecs);
+
+gpointer
+mono_method_get_wrapper_data (MonoMethod *method, guint32 id);
+
+MonoMethod*
+mono_method_get_last_managed  (void);
+
+void
+mono_stack_walk         (MonoStackWalk func, gpointer user_data);
+
+void
+mono_install_stack_walk (MonoStackWalkImpl func);
+
 #endif