2005-06-21 Martin Baulig <martin@ximian.com>
authorMartin Baulig <martin@novell.com>
Tue, 21 Jun 2005 12:33:15 +0000 (12:33 -0000)
committerMartin Baulig <martin@novell.com>
Tue, 21 Jun 2005 12:33:15 +0000 (12:33 -0000)
* class.c (mono_class_init): Don't initialize `class->fields' for
generic instances since they're initialized again in
compute_field_layout().
(compute_field_layout): Set the field's `generic_info' here; fix
#75320.

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

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

index 384496a1765c7e5382360db160cd323efce10a0f..b0833aac9f3e0cadd78189c512efa2c4e989482d 100644 (file)
@@ -1,3 +1,11 @@
+2005-06-21  Martin Baulig  <martin@ximian.com>
+
+       * class.c (mono_class_init): Don't initialize `class->fields' for
+       generic instances since they're initialized again in
+       compute_field_layout(). 
+       (compute_field_layout): Set the field's `generic_info' here; fix
+       #75320. 
+
 2005-06-21  Martin Baulig  <martin@ximian.com>
 
        * class-internals.h
index bc283d120c01d30fef6141d179307de8fddf63ba..5cab11214cf87eda843f1586ededfc1cdf56b43b 100644 (file)
@@ -642,8 +642,14 @@ class_compute_field_layout (MonoClass *class)
                if (class->generic_container)
                        container = class->generic_container;
                else if (class->generic_class) {
-                       container = class->generic_class->container_class->generic_container;
+                       MonoInflatedField *ifield = g_new0 (MonoInflatedField, 1);
+                       MonoClass *gklass = class->generic_class->container_class;
+
+                       container = gklass->generic_container;
                        g_assert (container);
+
+                       ifield->generic_type = gklass->fields [i].type;
+                       field->generic_info = ifield;
                }
                field->type = mono_metadata_parse_type_full (
                        m, (MonoGenericContext *) container, MONO_PARSE_FIELD,
@@ -1794,6 +1800,7 @@ mono_class_init (MonoClass *class)
                        class->methods [i] = mono_get_inflated_method (inflated);
                }
 
+#if 0
                g_assert (class->field.count == gklass->field.count);
                class->fields = g_new0 (MonoClassField, class->field.count);
 
@@ -1807,6 +1814,7 @@ mono_class_init (MonoClass *class)
                        class->fields [i].type = mono_class_inflate_generic_type (
                                class->fields [i].type, gclass->context);
                }
+#endif
 
                class->property = gklass->property;
                class->properties = g_new0 (MonoProperty, class->property.count);