Fix regression in Mono.C5.
authorRaja R Harinath <harinath@hurrynot.org>
Tue, 20 Dec 2005 12:07:34 +0000 (12:07 -0000)
committerRaja R Harinath <harinath@hurrynot.org>
Tue, 20 Dec 2005 12:07:34 +0000 (12:07 -0000)
* class.c (mono_class_create_generic): If 'klass' is an interface
set up the interface offsets.
(mono_class_is_assignable_from): Don't throw away generic arguments.

svn path=/trunk/mono/; revision=54651

mono/metadata/ChangeLog
mono/metadata/class.c

index 4f9d42e376f0259b4808f28df65aec1bd243ff9a..25e84dcd7b1794530e7df6a53b798f4a0345562d 100644 (file)
@@ -1,3 +1,10 @@
+2005-12-20  Raja R Harinath  <rharinath@novell.com>
+
+       Fix regression in Mono.C5.
+       * class.c (mono_class_create_generic): If 'klass' is an interface
+       set up the interface offsets.
+       (mono_class_is_assignable_from): Don't throw away generic arguments.
+
 2005-12-19  Raja R Harinath  <rharinath@novell.com>
 
        * icall.c (ves_icall_System_MonoType_getFullName): Return NULL for
index f01fb978300beb46607636b31c3d152623b6f3f5..bf74a218511491b8bd2d26c77c2a413eba9b0c85 100644 (file)
@@ -2815,6 +2815,9 @@ mono_class_create_generic (MonoInflatedGenericClass *gclass)
 
        if (klass->parent)
                mono_class_setup_parent (klass, klass->parent);
+
+       if (MONO_CLASS_IS_INTERFACE (klass))
+               setup_interface_offsets (klass, 0);
 }
 
 MonoClass *
@@ -3865,11 +3868,6 @@ mono_class_is_assignable_from (MonoClass *klass, MonoClass *oklass)
        if (!oklass->inited)
                mono_class_init (oklass);
 
-       if (klass->generic_class)
-               klass = klass->generic_class->container_class;
-       if (oklass->generic_class)
-               oklass = oklass->generic_class->container_class;
-
        if (MONO_CLASS_IS_INTERFACE (klass)) {
                if ((oklass->byval_arg.type == MONO_TYPE_VAR) || (oklass->byval_arg.type == MONO_TYPE_MVAR))
                        return FALSE;
@@ -3918,19 +3916,7 @@ mono_class_is_assignable_from (MonoClass *klass, MonoClass *oklass)
                if (klass == mono_defaults.object_class)
                        return TRUE;
 
-       /*
-        * Custom version of mono_class_has_parent (oklass, klass)
-        */
-       if (oklass->idepth >= klass->idepth) {
-               MonoClass *parent = oklass->supertypes [klass->idepth - 1];
-
-               if (parent->generic_class)
-                       parent = parent->generic_class->container_class;
-
-               return klass == parent;
-       }
-
-       return FALSE;
+       return mono_class_has_parent (oklass, klass);
 }      
 
 /*