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