}
#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
mimage = image->references [scopeindex-1]->image;
klass = mono_class_from_name (mimage, nspace, name);
+ 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];
return result;
}
+ if (!strcmp (mname, "Address")) {
+ g_assert (sig->hasthis);
+ g_assert (type->data.array->rank == sig->param_count);
+
+ result->addr = mono_lookup_internal_call ("__array_Address");
+ return result;
+ }
+
g_assert_not_reached ();
break;
}