Thu Apr 18 16:41:30 CEST 2002 Paolo Molaro <lupus@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 /* 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 inline MonoDomain *
93 mono_domain_get            (void);
94
95 inline void
96 mono_domain_set            (MonoDomain *domain);
97
98 MonoAssembly *
99 mono_domain_assembly_open  (MonoDomain *domain, char *name);
100
101 void
102 mono_domain_unload         (MonoDomain *domain, gboolean force);
103
104 void
105 mono_jit_info_table_add    (MonoDomain *domain, MonoJitInfo *ji);
106
107 MonoJitInfo *
108 mono_jit_info_table_find   (MonoDomain *domain, char *addr);
109
110 void
111 ves_icall_System_AppDomainSetup_InitAppDomainSetup (MonoAppDomainSetup *setup);
112
113 MonoAppDomain *
114 ves_icall_System_AppDomain_getCurDomain            (void);
115
116 MonoAppDomain *
117 ves_icall_System_AppDomain_createDomain            (MonoString         *friendly_name,
118                                                     MonoAppDomainSetup *setup);
119
120 MonoObject *
121 ves_icall_System_AppDomain_GetData                 (MonoAppDomain *ad, 
122                                                     MonoString    *name);
123
124 void
125 ves_icall_System_AppDomain_SetData                 (MonoAppDomain *ad, 
126                                                     MonoString    *name, 
127                                                     MonoObject    *data);
128
129 MonoAppDomainSetup *
130 ves_icall_System_AppDomain_getSetup                (MonoAppDomain *ad);
131
132 MonoString *
133 ves_icall_System_AppDomain_getFriendlyName         (MonoAppDomain *ad);
134
135 MonoArray *
136 ves_icall_System_AppDomain_GetAssemblies           (MonoAppDomain *ad);
137
138 MonoReflectionAssembly *
139 ves_icall_System_AppDomain_LoadAssembly            (MonoAppDomain *ad, 
140                                                     MonoReflectionAssemblyName *assRef,
141                                                     MonoObject    *evidence);
142
143 void
144 ves_icall_System_AppDomain_Unload                  (MonoAppDomain *ad);
145
146 gint32
147 ves_icall_System_AppDomain_ExecuteAssembly         (MonoAppDomain *ad, 
148                                                     MonoString    *file, 
149                                                     MonoObject    *evidence,
150                                                     MonoArray     *args);
151
152 #endif /* _MONO_METADATA_APPDOMAIN_H_ */