(mono_runtime_delegate_invoke): impl.
[mono.git] / mono / metadata / appdomain.h
1 /*
2  * appdomain.h: AppDomain functions
3  *
4  * Author:
5  *      Dietmar Maurer (dietmar@ximian.com)
6  *
7  * (C) 2001 Ximian, Inc.
8  */
9
10 #ifndef _MONO_METADATA_APPDOMAIN_H_
11 #define _MONO_METADATA_APPDOMAIN_H_
12
13 #include <config.h>
14 #include <glib.h>
15
16 #include <mono/metadata/object.h>
17 #include <mono/metadata/reflection.h>
18 #include <mono/metadata/mempool.h>
19 #include <mono/utils/mono-hash.h>
20 #include <mono/io-layer/io-layer.h>
21
22 /* This is a copy of System.AppDomainSetup */
23 typedef struct {
24         MonoObject object;
25         MonoString *application_base;
26         MonoString *application_name;
27         MonoString *cache_path;
28         MonoString *configuration_file;
29         MonoString *dynamic_base;
30         MonoString *license_file;
31         MonoString *private_bin_path;
32         MonoString *private_bin_path_probe;
33         MonoString *shadow_copy_directories;
34         MonoString *shadow_copy_files;
35         MonoBoolean publisher_policy;
36 } MonoAppDomainSetup;
37
38 typedef GArray MonoJitInfoTable;
39
40 typedef struct {
41         guint32  flags;
42         gpointer try_start;
43         gpointer try_end;
44         gpointer handler_start;
45         guint32  token_or_filter;
46 } MonoJitExceptionInfo;
47
48 typedef struct {
49         MonoMethod *method;
50         gpointer    code_start;
51         int         code_size;
52         guint32     used_regs;
53         unsigned    num_clauses;
54         MonoJitExceptionInfo *clauses;
55 } MonoJitInfo;
56
57 typedef struct _MonoAppDomain MonoAppDomain;
58
59 struct _MonoDomain {
60         MonoAppDomain      *domain;
61         CRITICAL_SECTION    lock;
62         MonoMemPool        *mp;
63         GHashTable         *env;
64         GHashTable         *assemblies;
65         MonoAppDomainSetup *setup;
66         char*              *friendly_name;
67         MonoGHashTable     *ldstr_table;
68         MonoGHashTable     *class_vtable_hash;
69         MonoGHashTable     *proxy_vtable_hash;
70         MonoGHashTable     *static_data_hash;
71         GHashTable         *jit_code_hash;
72         MonoJitInfoTable   *jit_info_table;
73 };
74
75 /* This is a copy of System.AppDomain */
76 struct _MonoAppDomain {
77         MonoObject  object;
78         MonoDomain *data;
79 };
80
81 extern MonoDomain *mono_root_domain;
82
83 #define mono_domain_lock(domain)   EnterCriticalSection(&(domain)->lock)
84 #define mono_domain_unlock(domain) LeaveCriticalSection(&(domain)->lock)
85
86 MonoDomain*
87 mono_init                  (const char *filename);
88
89 void
90 mono_runtime_init          (MonoDomain *domain);
91
92 MonoDomain *
93 mono_domain_create         (void);
94
95 inline MonoDomain *
96 mono_domain_get            (void);
97
98 inline void
99 mono_domain_set            (MonoDomain *domain);
100
101 MonoAssembly *
102 mono_domain_assembly_open  (MonoDomain *domain, char *name);
103
104 void
105 mono_domain_unload         (MonoDomain *domain, gboolean force);
106
107 void
108 mono_jit_info_table_add    (MonoDomain *domain, MonoJitInfo *ji);
109
110 MonoJitInfo *
111 mono_jit_info_table_find   (MonoDomain *domain, char *addr);
112
113 void
114 ves_icall_System_AppDomainSetup_InitAppDomainSetup (MonoAppDomainSetup *setup);
115
116 MonoAppDomain *
117 ves_icall_System_AppDomain_getCurDomain            (void);
118
119 MonoAppDomain *
120 ves_icall_System_AppDomain_createDomain            (MonoString         *friendly_name,
121                                                     MonoAppDomainSetup *setup);
122
123 MonoObject *
124 ves_icall_System_AppDomain_GetData                 (MonoAppDomain *ad, 
125                                                     MonoString    *name);
126
127 void
128 ves_icall_System_AppDomain_SetData                 (MonoAppDomain *ad, 
129                                                     MonoString    *name, 
130                                                     MonoObject    *data);
131
132 MonoAppDomainSetup *
133 ves_icall_System_AppDomain_getSetup                (MonoAppDomain *ad);
134
135 MonoString *
136 ves_icall_System_AppDomain_getFriendlyName         (MonoAppDomain *ad);
137
138 MonoArray *
139 ves_icall_System_AppDomain_GetAssemblies           (MonoAppDomain *ad);
140
141 MonoReflectionAssembly *
142 ves_icall_System_Reflection_Assembly_LoadFrom      (MonoString *fname);
143
144 MonoReflectionAssembly *
145 ves_icall_System_AppDomain_LoadAssembly            (MonoAppDomain *ad, 
146                                                     MonoReflectionAssemblyName *assRef,
147                                                     MonoObject    *evidence);
148
149 void
150 ves_icall_System_AppDomain_Unload                  (MonoAppDomain *ad);
151
152 gint32
153 ves_icall_System_AppDomain_ExecuteAssembly         (MonoAppDomain *ad, 
154                                                     MonoString    *file, 
155                                                     MonoObject    *evidence,
156                                                     MonoArray     *args);
157
158 #endif /* _MONO_METADATA_APPDOMAIN_H_ */