Author: zoltan
Date: 2007-10-21 13:28:14 -0400 (Sun, 21 Oct 2007)
New Revision: 87870
Modified:
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/class.c
Log:
2007-10-21 Zoltan Varga <[EMAIL PROTECTED]>
* class.c (mono_generic_class_get_class): Avoid setting
klass->size_inited and
related fields for dynamic classes. Fixes #334493.
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2007-10-21 15:45:43 UTC (rev 87869)
+++ trunk/mono/mono/metadata/ChangeLog 2007-10-21 17:28:14 UTC (rev 87870)
@@ -1,3 +1,8 @@
+2007-10-21 Zoltan Varga <[EMAIL PROTECTED]>
+
+ * class.c (mono_generic_class_get_class): Avoid setting
klass->size_inited and
+ related fields for dynamic classes. Fixes #334493.
+
2007-10-20 Zoltan Varga <[EMAIL PROTECTED]>
* class.c (mono_generic_class_get_class): Set klass->field.count as
well.
Modified: trunk/mono/mono/metadata/class.c
===================================================================
--- trunk/mono/mono/metadata/class.c 2007-10-21 15:45:43 UTC (rev 87869)
+++ trunk/mono/mono/metadata/class.c 2007-10-21 17:28:14 UTC (rev 87870)
@@ -3592,6 +3592,8 @@
klass->this_arg.type = klass->byval_arg.type = MONO_TYPE_GENERICINST;
klass->this_arg.data.generic_class =
klass->byval_arg.data.generic_class = gclass;
klass->this_arg.byref = TRUE;
+ klass->enumtype = gklass->enumtype;
+ klass->valuetype = gklass->valuetype;
klass->cast_class = klass->element_class = klass;
@@ -3599,14 +3601,20 @@
klass->cast_class = klass->element_class =
mono_class_get_nullable_param (klass);
if (gclass->is_dynamic) {
- klass->instance_size = gklass->instance_size;
- klass->sizes.class_size = gklass->sizes.class_size;
- klass->size_inited = 1;
klass->inited = 1;
- klass->valuetype = gklass->valuetype;
+ mono_class_setup_supertypes (klass);
- mono_class_setup_supertypes (klass);
+ if (klass->enumtype) {
+ /*
+ * For enums, gklass->fields might not been set, but
instance_size etc. is
+ * already set in mono_reflection_create_internal_class
(). For non-enums,
+ * these will be computed normally in
mono_class_layout_fields ().
+ */
+ klass->instance_size = gklass->instance_size;
+ klass->sizes.class_size = gklass->sizes.class_size;
+ klass->size_inited = 1;
+ }
}
klass->interface_count = gklass->interface_count;
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches