2002-12-30 Martin Baulig <martin@ximian.com>
[mono.git] / mono / metadata / loader.h
1 #ifndef _MONO_METADATA_LOADER_H_
2 #define _MONO_METADATA_LOADER_H_ 1
3
4 #include <mono/metadata/metadata.h>
5 #include <mono/metadata/image.h>
6
7 typedef enum {
8         MONO_WRAPPER_NONE,
9         MONO_WRAPPER_DELEGATE_INVOKE,
10         MONO_WRAPPER_DELEGATE_BEGIN_INVOKE,
11         MONO_WRAPPER_DELEGATE_END_INVOKE,
12         MONO_WRAPPER_RUNTIME_INVOKE,
13         MONO_WRAPPER_NATIVE_TO_MANAGED,
14         MONO_WRAPPER_MANAGED_TO_NATIVE,
15         MONO_WRAPPER_REMOTING_INVOKE,
16         MONO_WRAPPER_UNKNOWN
17 } MonoWrapperType;
18
19 typedef struct {
20         guint16 flags;  /* method flags */
21         guint16 iflags; /* method implementation flags */
22         guint32 token;
23         MonoClass *klass;
24         MonoMethodSignature *signature;
25         gpointer addr;
26         gpointer info; /* runtime info */
27         gpointer remoting_tramp; 
28         gint slot;
29         /* name is useful mostly for debugging */
30         const char *name;
31         /* this is used by the inlining algorithm */
32         unsigned int inline_info:1;
33         unsigned int uses_this:1;
34         MonoWrapperType wrapper_type:4;
35         unsigned int string_ctor:1;
36         unsigned int save_lmf:1;
37         gint16 inline_count;
38 } MonoMethod;
39
40 typedef struct {
41         MonoMethod method;
42         MonoMethodHeader *header;
43 } MonoMethodNormal;
44
45 typedef struct {
46         MonoMethodNormal method;
47         GList *data;
48 } MonoMethodWrapper;
49
50 typedef struct {
51         MonoMethod method;
52         void  (*code) (void);
53         /* add marshal info */
54         guint16 piflags;  /* pinvoke flags */
55         guint16 implmap_idx;  /* index into IMPLMAP */
56 } MonoMethodPInvoke;
57
58 typedef struct {
59         MonoImage *corlib;
60         MonoClass *object_class;
61         MonoClass *byte_class;
62         MonoClass *void_class;
63         MonoClass *boolean_class;
64         MonoClass *sbyte_class;
65         MonoClass *int16_class;
66         MonoClass *uint16_class;
67         MonoClass *int32_class;
68         MonoClass *uint32_class;
69         MonoClass *int_class;
70         MonoClass *uint_class;
71         MonoClass *int64_class;
72         MonoClass *uint64_class;
73         MonoClass *single_class;
74         MonoClass *double_class;
75         MonoClass *char_class;
76         MonoClass *string_class;
77         MonoClass *enum_class;
78         MonoClass *array_class;
79         MonoClass *multicastdelegate_class;
80         MonoClass *asyncresult_class;
81         MonoClass *waithandle_class;
82         MonoClass *typehandle_class;
83         MonoClass *fieldhandle_class;
84         MonoClass *methodhandle_class;
85         MonoClass *monotype_class;
86         MonoClass *exception_class;
87         MonoClass *threadabortexception_class;
88         MonoClass *thread_class;
89         MonoClass *transparent_proxy_class;
90         MonoClass *real_proxy_class;
91         MonoClass *mono_method_message_class;
92         MonoClass *appdomain_class;
93         MonoClass *field_info_class;
94         MonoClass *method_info_class;
95         MonoClass *stringbuilder_class;
96         MonoClass *math_class;
97         MonoClass *stack_frame_class;
98         MonoClass *stack_trace_class;
99         MonoClass *marshal_class;
100         MonoClass *iserializeable_class;
101         MonoClass *serializationinfo_class;
102         MonoClass *streamingcontext_class;
103 } MonoDefaults;
104
105 extern MonoDefaults mono_defaults;
106
107 typedef gboolean (*MonoStackWalk)     (MonoMethod *method, gint32 native_offset, gint32 il_offset, gboolean managed, gpointer data);
108 typedef void     (*MonoStackWalkImpl) (MonoStackWalk func, gpointer user_data);
109
110 void 
111 mono_init_icall            (void);
112
113 MonoMethod *
114 mono_get_method            (MonoImage *image, guint32 token, MonoClass *klass);
115
116 void               
117 mono_free_method           (MonoMethod *method);
118
119 MonoImage *
120 mono_load_image            (const char *fname, MonoImageOpenStatus *status);
121
122 void
123 mono_add_internal_call     (const char *name, gconstpointer method);
124
125 gpointer
126 mono_lookup_internal_call (MonoMethod *method);
127
128 int 
129 mono_dllmap_lookup (const char *dll, const char* func, const char **rdll, const char **rfunc);
130
131 void
132 mono_dllmap_insert (const char *dll, const char *func, const char *tdll, const char *tfunc);
133
134 gpointer
135 mono_lookup_pinvoke_call (MonoMethod *method);
136
137 void
138 mono_method_get_param_names (MonoMethod *method, const char **names);
139
140 gpointer
141 mono_method_get_wrapper_data (MonoMethod *method, guint32 id);
142
143 MonoMethod*
144 mono_method_get_last_managed  (void);
145
146 void
147 mono_stack_walk         (MonoStackWalk func, gpointer user_data);
148
149 void
150 mono_install_stack_walk (MonoStackWalkImpl func);
151
152 #endif