Fri Mar 29 16:09:54 CET 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / loader.c
index 8cfd8af21a4eec77edfc1efeab4420cbd0f94417..dc74573bf9706cf3bca9fac00c2a7f06cd888033 100644 (file)
@@ -58,123 +58,6 @@ mono_map_dll (const char *name)
 }
 #endif
 
-void
-mono_init (void)
-{
-       static gboolean initialized = FALSE;
-       MonoAssembly *ass;
-       enum MonoImageOpenStatus status = MONO_IMAGE_OK;
-
-       if (initialized)
-               return;
-
-       /* find the corlib */
-       ass = mono_assembly_open (CORLIB_NAME, NULL, &status);
-       g_assert (status == MONO_IMAGE_OK);
-       g_assert (ass != NULL);
-       mono_defaults.corlib = ass->image;
-
-       mono_defaults.object_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Object");
-       g_assert (mono_defaults.object_class != 0);
-
-       mono_defaults.void_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Void");
-       g_assert (mono_defaults.void_class != 0);
-
-       mono_defaults.boolean_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Boolean");
-       g_assert (mono_defaults.boolean_class != 0);
-
-       mono_defaults.byte_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Byte");
-       g_assert (mono_defaults.byte_class != 0);
-
-       mono_defaults.sbyte_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "SByte");
-       g_assert (mono_defaults.sbyte_class != 0);
-
-       mono_defaults.int16_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Int16");
-       g_assert (mono_defaults.int16_class != 0);
-
-       mono_defaults.uint16_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "UInt16");
-       g_assert (mono_defaults.uint16_class != 0);
-
-       mono_defaults.int32_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Int32");
-       g_assert (mono_defaults.int32_class != 0);
-
-       mono_defaults.uint32_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "UInt32");
-       g_assert (mono_defaults.uint32_class != 0);
-
-       mono_defaults.uint_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "UIntPtr");
-       g_assert (mono_defaults.uint_class != 0);
-
-       mono_defaults.int_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "IntPtr");
-       g_assert (mono_defaults.int_class != 0);
-
-       mono_defaults.int64_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Int64");
-       g_assert (mono_defaults.int64_class != 0);
-
-       mono_defaults.uint64_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "UInt64");
-       g_assert (mono_defaults.uint64_class != 0);
-
-       mono_defaults.single_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Single");
-       g_assert (mono_defaults.single_class != 0);
-
-       mono_defaults.double_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Double");
-       g_assert (mono_defaults.double_class != 0);
-
-       mono_defaults.char_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Char");
-       g_assert (mono_defaults.char_class != 0);
-
-       mono_defaults.string_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "String");
-       g_assert (mono_defaults.string_class != 0);
-
-       mono_defaults.enum_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Enum");
-       g_assert (mono_defaults.enum_class != 0);
-
-       mono_defaults.array_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Array");
-       g_assert (mono_defaults.array_class != 0);
-
-       mono_defaults.delegate_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Delegate");
-       g_assert (mono_defaults.delegate_class != 0);
-
-       mono_defaults.typehandle_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "RuntimeTypeHandle");
-       g_assert (mono_defaults.typehandle_class != 0);
-
-       mono_defaults.methodhandle_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "RuntimeMethodHandle");
-       g_assert (mono_defaults.methodhandle_class != 0);
-
-       mono_defaults.fieldhandle_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "RuntimeFieldHandle");
-       g_assert (mono_defaults.fieldhandle_class != 0);
-
-       mono_defaults.monotype_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "MonoType");
-       g_assert (mono_defaults.monotype_class != 0);
-
-       mono_defaults.exception_class = mono_class_from_name (
-                mono_defaults.corlib, "System", "Exception");
-       g_assert (mono_defaults.exception_class != 0);
-}
-
 static GHashTable *icall_hash = NULL;
 
 void
@@ -339,30 +222,13 @@ method_from_memberref (MonoImage *image, guint32 index)
                        mimage = image->references [scopeindex-1]->image;
 
                        klass = mono_class_from_name (mimage, nspace, name);
-                       g_assert (klass != NULL);
+                       if (!klass) {
+                               g_warning ("Missing method %s.%s::%s", nspace, name, mname);
+                               mono_metadata_free_method_signature (sig);
+                               return NULL;
+                       }
                        mono_class_init (klass);
 
-                       /* 
-                        * FIXME: this is a workaround for the different signatures
-                        * in delegates constructors you get in user code (native int)
-                        * and in mscorlib (native unsigned int)
-                        */
-                       if (klass->parent && klass->parent->parent == mono_defaults.delegate_class) {
-                               for (i = 0; i < klass->method.count; ++i) {
-                                       MonoMethod *m = klass->methods [i];
-                                       if (!strcmp (mname, m->name)) {
-                                               if (!strcmp (mname, ".ctor")) {
-                                                       /* we assume signature is correct */
-                                                       mono_metadata_free_method_signature (sig);
-                                                       return m;
-                                               }
-                                               if (mono_metadata_signature_equal (sig, m->signature)) {
-                                                       mono_metadata_free_method_signature (sig);
-                                                       return m;
-                                               }
-                                       }
-                               }
-                       }
                        /* mostly dumb search for now */
                        for (i = 0; i < klass->method.count; ++i) {
                                MonoMethod *m = klass->methods [i];