From e9493ca335d511d1a10305b55d82c57f419118e3 Mon Sep 17 00:00:00 2001 From: Rodrigo Kumpera Date: Sun, 29 Jan 2012 01:20:24 +0000 Subject: [PATCH] Last round of fullaot fixes for lazy init'ng supertypes. --- mono/metadata/class.c | 3 ++- mono/metadata/object.c | 3 ++- mono/mini/mini-trampolines.c | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/mono/metadata/class.c b/mono/metadata/class.c index 67d88496492..9eb42e66abd 100644 --- a/mono/metadata/class.c +++ b/mono/metadata/class.c @@ -8934,7 +8934,8 @@ mono_class_has_parent_and_ignore_generics (MonoClass *klass, MonoClass *parent) int i; klass = mono_class_get_generic_type_definition (klass); parent = mono_class_get_generic_type_definition (parent); - + mono_class_setup_supertypes (klass); + for (i = 0; i < klass->idepth; ++i) { if (parent == mono_class_get_generic_type_definition (klass->supertypes [i])) return TRUE; diff --git a/mono/metadata/object.c b/mono/metadata/object.c index 856cc4b348e..2ddb546364d 100644 --- a/mono/metadata/object.c +++ b/mono/metadata/object.c @@ -5155,7 +5155,8 @@ mono_object_isinst_mbyref (MonoObject *obj, MonoClass *klass) MonoClass *oklass = vt->klass; if ((oklass == mono_defaults.transparent_proxy_class)) oklass = ((MonoTransparentProxy *)obj)->remote_class->proxy_class; - + + mono_class_setup_supertypes (klass); if ((oklass->idepth >= klass->idepth) && (oklass->supertypes [klass->idepth - 1] == klass)) return obj; } diff --git a/mono/mini/mini-trampolines.c b/mono/mini/mini-trampolines.c index 94edc054621..49b3c05b6fd 100644 --- a/mono/mini/mini-trampolines.c +++ b/mono/mini/mini-trampolines.c @@ -420,8 +420,10 @@ common_call_trampoline (mgreg_t *regs, guint8 *code, MonoMethod *m, guint8* tram g_assert (this_argument->vtable->klass->inited); //mono_class_init (this_argument->vtable->klass); - if (!vtable_slot) + if (!vtable_slot) { + mono_class_setup_supertypes (this_argument->vtable->klass); klass = this_argument->vtable->klass->supertypes [m->klass->idepth - 1]; + } #else NOT_IMPLEMENTED; #endif -- 2.11.4.GIT