* icall.c (ves_icall_MonoType_GetEvent): Handle events without
[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 #include <mono/io-layer/io-layer.h>
7
8 typedef enum {
9         MONO_WRAPPER_NONE,
10         MONO_WRAPPER_DELEGATE_INVOKE,
11         MONO_WRAPPER_DELEGATE_BEGIN_INVOKE,
12         MONO_WRAPPER_DELEGATE_END_INVOKE,
13         MONO_WRAPPER_RUNTIME_INVOKE,
14         MONO_WRAPPER_NATIVE_TO_MANAGED,
15         MONO_WRAPPER_MANAGED_TO_NATIVE,
16         MONO_WRAPPER_REMOTING_INVOKE,
17         MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK,
18         MONO_WRAPPER_LDFLD,
19         MONO_WRAPPER_STFLD,
20         MONO_WRAPPER_SYNCHRONIZED,
21         MONO_WRAPPER_DYNAMIC_METHOD,
22         MONO_WRAPPER_UNKNOWN
23 } MonoWrapperType;
24
25 typedef struct {
26         guint16 flags;  /* method flags */
27         guint16 iflags; /* method implementation flags */
28         guint32 token;
29         MonoClass *klass;
30         MonoMethodSignature *signature;
31         gpointer addr;
32         gpointer info; /* runtime info */
33         gpointer remoting_tramp; 
34         gint slot;
35         /* name is useful mostly for debugging */
36         const char *name;
37         /* this is used by the inlining algorithm */
38         unsigned int inline_info:1;
39         unsigned int uses_this:1;
40         unsigned int wrapper_type:4;
41         unsigned int string_ctor:1;
42         unsigned int save_lmf:1;
43         gint16 inline_count;
44 } MonoMethod;
45
46 typedef struct {
47         MonoMethod method;
48         MonoMethodHeader *header;
49 } MonoMethodNormal;
50
51 typedef struct {
52         MonoMethodNormal method;
53         GList *data;
54 } MonoMethodWrapper;
55
56 typedef struct {
57         MonoMethodNormal nmethod;
58         MonoGenericContext *context;
59         MonoMethod *declaring;
60 } MonoMethodInflated;
61
62 typedef struct {
63         MonoMethod method;
64         void  (*code) (void);
65         /* add marshal info */
66         guint16 piflags;  /* pinvoke flags */
67         guint16 implmap_idx;  /* index into IMPLMAP */
68 } MonoMethodPInvoke;
69
70 typedef struct {
71         MonoImage *corlib;
72         MonoClass *object_class;
73         MonoClass *byte_class;
74         MonoClass *void_class;
75         MonoClass *boolean_class;
76         MonoClass *sbyte_class;
77         MonoClass *int16_class;
78         MonoClass *uint16_class;
79         MonoClass *int32_class;
80         MonoClass *uint32_class;
81         MonoClass *int_class;
82         MonoClass *uint_class;
83         MonoClass *int64_class;
84         MonoClass *uint64_class;
85         MonoClass *single_class;
86         MonoClass *double_class;
87         MonoClass *char_class;
88         MonoClass *string_class;
89         MonoClass *enum_class;
90         MonoClass *array_class;
91         MonoClass *delegate_class;
92         MonoClass *multicastdelegate_class;
93         MonoClass *asyncresult_class;
94         MonoClass *waithandle_class;
95         MonoClass *typehandle_class;
96         MonoClass *fieldhandle_class;
97         MonoClass *methodhandle_class;
98         MonoClass *monotype_class;
99         MonoClass *exception_class;
100         MonoClass *threadabortexception_class;
101         MonoClass *thread_class;
102         MonoClass *transparent_proxy_class;
103         MonoClass *real_proxy_class;
104         MonoClass *mono_method_message_class;
105         MonoClass *appdomain_class;
106         MonoClass *field_info_class;
107         MonoClass *method_info_class;
108         MonoClass *stringbuilder_class;
109         MonoClass *math_class;
110         MonoClass *stack_frame_class;
111         MonoClass *stack_trace_class;
112         MonoClass *marshal_class;
113         MonoClass *iserializeable_class;
114         MonoClass *serializationinfo_class;
115         MonoClass *streamingcontext_class;
116         MonoClass *typed_reference_class;
117         MonoClass *argumenthandle_class;
118         MonoClass *marshalbyrefobject_class;
119         MonoClass *monitor_class;
120         MonoClass *iremotingtypeinfo_class;
121 } MonoDefaults;
122
123 extern MonoDefaults mono_defaults;
124
125 /*
126  * This lock protects the hash tables inside MonoImage used by the metadata 
127  * loading functions in class.c and loader.c.
128  */
129 extern CRITICAL_SECTION loader_mutex;
130
131 #define mono_loader_lock() EnterCriticalSection (&loader_mutex);
132 #define mono_loader_unlock() LeaveCriticalSection (&loader_mutex);
133
134 typedef gboolean (*MonoStackWalk)     (MonoMethod *method, gint32 native_offset, gint32 il_offset, gboolean managed, gpointer data);
135 typedef void     (*MonoStackWalkImpl) (MonoStackWalk func, gpointer user_data);
136
137 void
138 mono_loader_init           (void);
139
140 void 
141 mono_init_icall            (void);
142
143 MonoMethod *
144 mono_get_method            (MonoImage *image, guint32 token, MonoClass *klass);
145
146 MonoMethod *
147 mono_get_method_full       (MonoImage *image, guint32 token, MonoClass *klass, MonoGenericContext *context);
148
149 MonoMethod *
150 mono_get_method_constrained (MonoImage *image, guint32 token, MonoClass *constrained_class, MonoGenericContext *context);
151
152 void               
153 mono_free_method           (MonoMethod *method);
154
155 MonoMethodSignature* 
156 mono_method_get_signature  (MonoMethod *method, MonoImage *image, guint32 token);
157
158 MonoImage *
159 mono_load_image            (const char *fname, MonoImageOpenStatus *status);
160
161 void
162 mono_add_internal_call     (const char *name, gconstpointer method);
163
164 gpointer
165 mono_lookup_internal_call (MonoMethod *method);
166
167 void
168 mono_dllmap_insert (MonoImage *assembly, const char *dll, const char *func, const char *tdll, const char *tfunc);
169
170 gpointer
171 mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char **exc_arg);
172
173 void
174 mono_method_get_param_names (MonoMethod *method, const char **names);
175
176 void
177 mono_method_get_marshal_info (MonoMethod *method, MonoMarshalSpec **mspecs);
178
179 gboolean
180 mono_method_has_marshal_info (MonoMethod *method);
181
182 gpointer
183 mono_method_get_wrapper_data (MonoMethod *method, guint32 id);
184
185 MonoMethod*
186 mono_method_get_last_managed  (void);
187
188 void
189 mono_stack_walk         (MonoStackWalk func, gpointer user_data);
190
191 void
192 mono_install_stack_walk (MonoStackWalkImpl func);
193
194 void
195 mono_loader_wine_init   (void);
196
197 MonoGenericParam *mono_metadata_load_generic_params (MonoImage *image, guint32 token, guint32 *num);
198
199 #endif