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