* appdomain.h, appdomain.c: split initialization that requires the
execution engine support into mono_runtime_init().
svn path=/trunk/mono/; revision=3687
+
+Mon Apr 8 17:17:04 CEST 2002 Paolo Molaro <lupus@ximian.com>
+
+ * appdomain.h, appdomain.c: split initialization that requires the
+ execution engine support into mono_runtime_init().
+
2002-04-08 Dietmar Maurer <dietmar@ximian.com>
* class.c (mono_class_init): don't include vtable inside MonoClass
2002-04-08 Dietmar Maurer <dietmar@ximian.com>
* class.c (mono_class_init): don't include vtable inside MonoClass
*
* Creates the initial application domain and initializes the mono_defaults
* structure.
*
* Creates the initial application domain and initializes the mono_defaults
* structure.
+ * This function is guaranteed to not run any IL code.
*
* Returns: the initial domain.
*/
*
* Returns: the initial domain.
*/
mono_init (const char *filename)
{
static MonoDomain *domain = NULL;
mono_init (const char *filename)
{
static MonoDomain *domain = NULL;
- MonoAppDomainSetup *setup;
- MonoAppDomain *ad;
- MonoClass *class;
- MonoString *name;
MonoImageOpenStatus status = MONO_IMAGE_OK;
if (domain)
MonoImageOpenStatus status = MONO_IMAGE_OK;
if (domain)
mono_defaults.corlib, "System.Runtime.Remoting.Messaging", "MonoMethodMessage");
g_assert (mono_defaults.mono_method_message_class != 0);
mono_defaults.corlib, "System.Runtime.Remoting.Messaging", "MonoMethodMessage");
g_assert (mono_defaults.mono_method_message_class != 0);
+ domain->friendly_name = g_path_get_basename (filename);
+
+ return domain;
+}
+
+/*
+ * mono_runtime_init:
+ * @domain: domain returned by mono_init ()
+ *
+ * Initialize the core AppDomain: this function will run also some
+ * IL initialization code, so it needs the execution engine to be fully
+ * operational.
+ */
+void
+mono_runtime_init (MonoDomain *domain)
+{
+ MonoAppDomainSetup *setup;
+ MonoAppDomain *ad;
+ MonoClass *class;
+
class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomainSetup");
setup = (MonoAppDomainSetup *) mono_object_new (domain, class);
ves_icall_System_AppDomainSetup_InitAppDomainSetup (setup);
class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomainSetup");
setup = (MonoAppDomainSetup *) mono_object_new (domain, class);
ves_icall_System_AppDomainSetup_InitAppDomainSetup (setup);
- name = mono_string_new (domain, g_path_get_basename (filename));
-
class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomain");
ad = (MonoAppDomain *) mono_object_new (domain, class);
ad->data = domain;
domain->domain = ad;
domain->setup = setup;
class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomain");
ad = (MonoAppDomain *) mono_object_new (domain, class);
ad->data = domain;
domain->domain = ad;
domain->setup = setup;
- domain->friendly_name = name;
g_assert (ad != NULL);
g_assert (ad->data != NULL);
g_assert (ad != NULL);
g_assert (ad->data != NULL);
- return ad->data->friendly_name;
+ return mono_string_new (ad->data, ad->data->friendly_name);
ad->data = data = mono_create_domain ();
data->domain = ad;
data->setup = setup;
ad->data = data = mono_create_domain ();
data->domain = ad;
data->setup = setup;
- data->friendly_name = friendly_name;
+ data->friendly_name = mono_string_to_utf8 (friendly_name);
// fixme: what to do next ?
// fixme: what to do next ?
+ g_free (domain->friendly_name);
g_hash_table_foreach (domain->assemblies, remove_assembly, NULL);
g_hash_table_destroy (domain->env);
g_hash_table_foreach (domain->assemblies, remove_assembly, NULL);
g_hash_table_destroy (domain->env);
GHashTable *env;
GHashTable *assemblies;
MonoAppDomainSetup *setup;
GHashTable *env;
GHashTable *assemblies;
MonoAppDomainSetup *setup;
- MonoString *friendly_name;
MonoGHashTable *ldstr_table;
MonoGHashTable *class_vtable_hash;
MonoGHashTable *proxy_vtable_hash;
MonoGHashTable *ldstr_table;
MonoGHashTable *class_vtable_hash;
MonoGHashTable *proxy_vtable_hash;
extern MonoDomain *mono_root_domain;
extern MonoDomain *mono_root_domain;
mono_init (const char *filename);
mono_init (const char *filename);
+void
+mono_runtime_init (MonoDomain *domain);
+
inline MonoDomain *
mono_domain_get (void);
inline MonoDomain *
mono_domain_get (void);