architecture independent marshaling code
[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 struct {
8         guint16 flags;  /* method flags */
9         guint16 iflags; /* method implementation flags */
10         MonoClass *klass;
11         MonoMethodSignature *signature;
12         gpointer addr;
13         gpointer info; /* runtime info */
14         gpointer remoting_tramp; 
15         gint slot;
16         /* name is useful mostly for debugging */
17         const char *name;
18         /* this is used by the inlining algorithm */
19         unsigned int inline_info:1;
20         unsigned int uses_this:1;
21         unsigned int is_wrapper:1;
22         unsigned int string_ctor:1;
23         unsigned int save_lmf:1;
24         gint16 inline_count;
25 } MonoMethod;
26
27 typedef struct {
28         MonoMethod method;
29         MonoMethodHeader *header;
30 } MonoMethodNormal;
31
32 typedef struct {
33         MonoMethodNormal method;
34         GList *data;
35 } MonoMethodWrapper;
36
37 typedef struct {
38         MonoMethod method;
39         void  (*code) (void);
40         /* add marshal info */
41         guint16 piflags;  /* pinvoke flags */
42         guint16 implmap_idx;  /* index into IMPLMAP */
43 } MonoMethodPInvoke;
44
45 typedef struct {
46         MonoImage *corlib;
47         MonoClass *object_class;
48         MonoClass *byte_class;
49         MonoClass *void_class;
50         MonoClass *boolean_class;
51         MonoClass *sbyte_class;
52         MonoClass *int16_class;
53         MonoClass *uint16_class;
54         MonoClass *int32_class;
55         MonoClass *uint32_class;
56         MonoClass *int_class;
57         MonoClass *uint_class;
58         MonoClass *int64_class;
59         MonoClass *uint64_class;
60         MonoClass *single_class;
61         MonoClass *double_class;
62         MonoClass *char_class;
63         MonoClass *string_class;
64         MonoClass *enum_class;
65         MonoClass *array_class;
66         MonoClass *multicastdelegate_class;
67         MonoClass *asyncresult_class;
68         MonoClass *waithandle_class;
69         MonoClass *typehandle_class;
70         MonoClass *fieldhandle_class;
71         MonoClass *methodhandle_class;
72         MonoClass *monotype_class;
73         MonoClass *exception_class;
74         MonoClass *thread_class;
75         MonoClass *transparent_proxy_class;
76         MonoClass *real_proxy_class;
77         MonoClass *mono_method_message_class;
78         MonoClass *appdomain_class;
79         MonoClass *field_info_class;
80         MonoClass *stringbuilder_class;
81         MonoClass *math_class;
82         MonoClass *stack_frame_class;
83         MonoClass *stack_trace_class;
84         MonoClass *marshal_class;
85 } MonoDefaults;
86
87 extern MonoDefaults mono_defaults;
88
89 void 
90 mono_init_icall            (void);
91
92 MonoMethod *
93 mono_get_method            (MonoImage *image, guint32 token, MonoClass *klass);
94
95 void               
96 mono_free_method           (MonoMethod *method);
97
98 MonoImage *
99 mono_load_image            (const char *fname, MonoImageOpenStatus *status);
100
101 void
102 mono_add_internal_call     (const char *name, gconstpointer method);
103
104 gpointer
105 mono_lookup_internal_call (MonoMethod *method);
106
107 int 
108 mono_dllmap_lookup (const char *dll, const char* func, const char **rdll, const char **rfunc);
109
110 void
111 mono_dllmap_insert (const char *dll, const char *func, const char *tdll, const char *tfunc);
112
113 gpointer
114 mono_lookup_pinvoke_call (MonoMethod *method);
115
116 void
117 mono_method_get_param_names (MonoMethod *method, const char **names);
118
119 gpointer
120 mono_method_get_wrapper_data (MonoMethod *method, guint32 id);
121
122 #endif