Author: zoltan
Date: 2007-10-20 12:32:24 -0400 (Sat, 20 Oct 2007)
New Revision: 87854
Modified:
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/class.c
Log:
2007-10-20 Zoltan Varga <[EMAIL PROTECTED]>
* class.c (mono_class_layout_fields): Set size_inited for generic
classes as well.
(mono_class_setup_vtable): Obtain overrides for dynamic generic classes
correctly.
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2007-10-20 16:23:42 UTC (rev 87853)
+++ trunk/mono/mono/metadata/ChangeLog 2007-10-20 16:32:24 UTC (rev 87854)
@@ -1,5 +1,8 @@
2007-10-20 Zoltan Varga <[EMAIL PROTECTED]>
+ * class.c (mono_class_layout_fields): Set size_inited for generic
classes as well.
+ (mono_class_setup_vtable): Obtain overrides for dynamic generic classes
correctly.
+
* class.c (mono_class_setup_methods): Handle dynamic inflated classes
correctly.
* reflection.c (create_generic_typespec): Initialize
klass->generic_container
Modified: trunk/mono/mono/metadata/class.c
===================================================================
--- trunk/mono/mono/metadata/class.c 2007-10-20 16:23:42 UTC (rev 87853)
+++ trunk/mono/mono/metadata/class.c 2007-10-20 16:32:24 UTC (rev 87854)
@@ -1025,8 +1025,10 @@
MonoClassField *field;
if (class->generic_container ||
- (class->generic_class &&
class->generic_class->context.class_inst->is_open))
+ (class->generic_class &&
class->generic_class->context.class_inst->is_open)) {
+ class->size_inited = TRUE;
return;
+ }
/*
* Enable GC aware auto layout: in this mode, reference
@@ -2128,6 +2130,7 @@
{
MonoMethod **overrides;
MonoGenericContext *context;
+ MonoClass *overrides_class;
guint32 type_token;
int onum = 0;
gboolean ok = TRUE;
@@ -2152,13 +2155,15 @@
if (class->generic_class) {
context = mono_class_get_context (class);
type_token = class->generic_class->container_class->type_token;
+ overrides_class = class->generic_class->container_class;
} else {
context = (MonoGenericContext *) class->generic_container;
type_token = class->type_token;
+ overrides_class = class;
}
if (class->image->dynamic)
- mono_reflection_get_dynamic_overrides (class, &overrides,
&onum);
+ mono_reflection_get_dynamic_overrides (overrides_class,
&overrides, &onum);
else {
/* The following call fails if there are missing methods in the
type */
ok = mono_class_get_overrides_full (class->image, type_token,
&overrides, &onum, context);
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches