Author: raja
Date: 2007-01-11 04:46:00 -0500 (Thu, 11 Jan 2007)
New Revision: 70844
Modified:
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/class-internals.h
trunk/mono/mono/metadata/class.c
trunk/mono/mono/metadata/icall.c
trunk/mono/mono/metadata/metadata.c
trunk/mono/mono/metadata/metadata.h
trunk/mono/mono/metadata/reflection.c
Log:
* class-internals.h (_MonoGenericClass.is_inflated): Remove.
(_MonoGenericClass.cached_class): Move here and rename from lone
remaining field of ...
(_MonoInflatedGenericClass): ... this. Remove.
* metadata.h, class.c, reflection.c, metadata.c, icall.c: Update to changes.
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2007-01-11 09:41:30 UTC (rev 70843)
+++ trunk/mono/mono/metadata/ChangeLog 2007-01-11 09:46:00 UTC (rev 70844)
@@ -1,5 +1,12 @@
2007-01-11 Raja R Harinath <[EMAIL PROTECTED]>
+ * class-internals.h (_MonoGenericClass.is_inflated): Remove.
+ (_MonoGenericClass.cached_class): Move here and rename from lone
+ remaining field of ...
+ (_MonoInflatedGenericClass): ... this. Remove.
+ * metadata.h, class.c, reflection.c, metadata.c, icall.c: Update
+ to changes.
+
Fix mcs/tests/test-128.cs regression.
* reflection.c (encode_cattr_value) [MONO_TYPE_SZARRAY]: Revert
2007-01-10 change below.
Modified: trunk/mono/mono/metadata/class-internals.h
===================================================================
--- trunk/mono/mono/metadata/class-internals.h 2007-01-11 09:41:30 UTC (rev
70843)
+++ trunk/mono/mono/metadata/class-internals.h 2007-01-11 09:46:00 UTC (rev
70844)
@@ -395,25 +395,15 @@
MonoClass *container_class; /* the generic type definition */
MonoGenericContext *cached_context; /* if present, a "trivial"
context that doesn't contain any method instantiation */
guint is_dynamic : 1; /* We're a MonoDynamicGenericClass */
- guint is_inflated : 1; /* We're a MonoInflatedGenericClass */
+ MonoClass *cached_class; /* if present, the MonoClass
corresponding to the instantiation. */
};
/*
- * Performance optimization:
- * We don't create the `MonoClass' for a `MonoGenericClass' until we really
- * need it.
- */
-struct _MonoInflatedGenericClass {
- MonoGenericClass generic_class;
- MonoClass *klass;
-};
-
-/*
* This is used when instantiating a generic type definition which is
* a TypeBuilder.
*/
struct _MonoDynamicGenericClass {
- MonoInflatedGenericClass generic_class;
+ MonoGenericClass generic_class;
int count_methods;
MonoMethod **methods;
int count_ctors;
Modified: trunk/mono/mono/metadata/class.c
===================================================================
--- trunk/mono/mono/metadata/class.c 2007-01-11 09:41:30 UTC (rev 70843)
+++ trunk/mono/mono/metadata/class.c 2007-01-11 09:46:00 UTC (rev 70844)
@@ -454,7 +454,6 @@
static MonoGenericClass *
inflate_generic_class (MonoGenericClass *ogclass, MonoGenericContext *context)
{
- MonoInflatedGenericClass *igclass;
MonoGenericClass *ngclass, *cached;
MonoGenericInst *ninst;
@@ -464,21 +463,15 @@
if (ogclass->is_dynamic) {
MonoDynamicGenericClass *dgclass = g_new0
(MonoDynamicGenericClass, 1);
- igclass = &dgclass->generic_class;
- ngclass = &igclass->generic_class;
- ngclass->is_inflated = 1;
+ ngclass = &dgclass->generic_class;
ngclass->is_dynamic = 1;
} else {
- igclass = g_new0 (MonoInflatedGenericClass, 1);
- ngclass = &igclass->generic_class;
- ngclass->is_inflated = 1;
+ ngclass = g_new0 (MonoGenericClass, 1);
}
ngclass->container_class = ogclass->container_class;
ngclass->inst = ninst;
- igclass->klass = NULL;
-
mono_loader_lock ();
cached = mono_metadata_lookup_generic_class (ngclass);
mono_loader_unlock ();
@@ -2870,19 +2863,14 @@
MonoGenericClass *
mono_get_shared_generic_class (MonoGenericContainer *container, gboolean
is_dynamic)
{
- MonoInflatedGenericClass *igclass;
MonoGenericClass *gclass;
if (is_dynamic) {
MonoDynamicGenericClass *dgclass = g_new0
(MonoDynamicGenericClass, 1);
- igclass = &dgclass->generic_class;
- gclass = &igclass->generic_class;
- gclass->is_inflated = 1;
+ gclass = &dgclass->generic_class;
gclass->is_dynamic = 1;
} else {
- igclass = g_new0 (MonoInflatedGenericClass, 1);
- gclass = &igclass->generic_class;
- gclass->is_inflated = 1;
+ gclass = g_new0 (MonoGenericClass, 1);
}
gclass->cached_context = &container->context;
@@ -2898,7 +2886,7 @@
}
}
- igclass->klass = container->klass;
+ gclass->cached_class = container->klass;
return gclass;
}
@@ -3079,21 +3067,17 @@
static MonoClass*
mono_generic_class_get_class (MonoGenericClass *gclass)
{
- MonoInflatedGenericClass *igclass;
MonoClass *klass, *gklass;
int i;
- g_assert (gclass->is_inflated);
- igclass = (MonoInflatedGenericClass *) gclass;
-
mono_loader_lock ();
- if (igclass->klass) {
+ if (gclass->cached_class) {
mono_loader_unlock ();
- return igclass->klass;
+ return gclass->cached_class;
}
- igclass->klass = g_malloc0 (sizeof (MonoClass));
- klass = igclass->klass;
+ gclass->cached_class = g_malloc0 (sizeof (MonoClass));
+ klass = gclass->cached_class;
gklass = gclass->container_class;
Modified: trunk/mono/mono/metadata/icall.c
===================================================================
--- trunk/mono/mono/metadata/icall.c 2007-01-11 09:41:30 UTC (rev 70843)
+++ trunk/mono/mono/metadata/icall.c 2007-01-11 09:46:00 UTC (rev 70844)
@@ -2163,7 +2163,7 @@
ves_icall_MonoGenericClass_GetInterfaces (MonoReflectionGenericClass *type)
{
static MonoClass *System_Reflection_MonoGenericClass;
- MonoDynamicGenericClass *gclass;
+ MonoGenericClass *gclass;
MonoReflectionTypeBuilder *tb = NULL;
MonoClass *klass = NULL;
MonoDomain *domain;
@@ -2180,14 +2180,14 @@
domain = mono_object_domain (type);
- g_assert (type->type.type->data.generic_class->is_dynamic);
- gclass = (MonoDynamicGenericClass *)
type->type.type->data.generic_class;
+ gclass = type->type.type->data.generic_class;
+ g_assert (gclass->is_dynamic);
if (!strcmp (type->generic_type->object.vtable->klass->name,
"TypeBuilder")) {
tb = (MonoReflectionTypeBuilder *) type->generic_type;
icount = tb->interfaces ? mono_array_length (tb->interfaces) :
0;
} else {
- klass = gclass->generic_class.generic_class.container_class;
+ klass = gclass->container_class;
mono_class_init (klass);
icount = klass->interface_count;
}
@@ -2204,8 +2204,7 @@
} else
it = &klass->interfaces [i]->byval_arg;
- it = mono_class_inflate_generic_type (
- it, mono_generic_class_get_context ((MonoGenericClass
*) gclass));
+ it = mono_class_inflate_generic_type (it,
mono_generic_class_get_context (gclass));
iface = mono_type_get_object (domain, it);
mono_array_setref (res, i, iface);
Modified: trunk/mono/mono/metadata/metadata.c
===================================================================
--- trunk/mono/mono/metadata/metadata.c 2007-01-11 09:41:30 UTC (rev 70843)
+++ trunk/mono/mono/metadata/metadata.c 2007-01-11 09:46:00 UTC (rev 70844)
@@ -2012,15 +2012,12 @@
do_mono_metadata_parse_generic_class (MonoType *type, MonoImage *m,
MonoGenericContainer *container,
const char *ptr, const char **rptr)
{
- MonoInflatedGenericClass *igclass;
MonoGenericClass *gclass, *cached;
MonoClass *gklass;
MonoType *gtype;
int count;
- igclass = g_new0 (MonoInflatedGenericClass, 1);
- gclass = &igclass->generic_class;
- gclass->is_inflated = TRUE;
+ gclass = g_new0 (MonoGenericClass, 1);
type->data.generic_class = gclass;
@@ -2058,7 +2055,6 @@
cached = g_hash_table_lookup (generic_class_cache, gclass);
if (cached) {
- g_free (igclass->klass);
g_free (gclass);
type->data.generic_class = cached;
Modified: trunk/mono/mono/metadata/metadata.h
===================================================================
--- trunk/mono/mono/metadata/metadata.h 2007-01-11 09:41:30 UTC (rev 70843)
+++ trunk/mono/mono/metadata/metadata.h 2007-01-11 09:46:00 UTC (rev 70844)
@@ -291,7 +291,6 @@
typedef struct _MonoType MonoType;
typedef struct _MonoGenericInst MonoGenericInst;
typedef struct _MonoGenericClass MonoGenericClass;
-typedef struct _MonoInflatedGenericClass MonoInflatedGenericClass;
typedef struct _MonoDynamicGenericClass MonoDynamicGenericClass;
typedef struct _MonoGenericMethod MonoGenericMethod;
typedef struct _MonoGenericContext MonoGenericContext;
Modified: trunk/mono/mono/metadata/reflection.c
===================================================================
--- trunk/mono/mono/metadata/reflection.c 2007-01-11 09:41:30 UTC (rev
70843)
+++ trunk/mono/mono/metadata/reflection.c 2007-01-11 09:46:00 UTC (rev
70844)
@@ -8726,14 +8726,10 @@
if (is_dynamic) {
MonoDynamicGenericClass *dgclass = g_new0
(MonoDynamicGenericClass, 1);
- MonoInflatedGenericClass *igclass = &dgclass->generic_class;
- gclass = &igclass->generic_class;
+ gclass = &dgclass->generic_class;
gclass->is_dynamic = TRUE;
- gclass->is_inflated = TRUE;
} else {
- MonoInflatedGenericClass *igclass = g_new0
(MonoInflatedGenericClass, 1);
- gclass = &igclass->generic_class;
- gclass->is_inflated = TRUE;
+ gclass = g_new0 (MonoGenericClass, 1);
}
gclass->inst = g_new0 (MonoGenericInst, 1);
@@ -8779,7 +8775,6 @@
{
MonoClass *klass;
MonoGenericClass *gclass, *cached;
- MonoInflatedGenericClass *igclass;
MonoType *geninst;
int i;
@@ -8790,9 +8785,7 @@
mono_loader_lock ();
- igclass = g_new0 (MonoInflatedGenericClass, 1);
- gclass = &igclass->generic_class;
- gclass->is_inflated = TRUE;
+ gclass = g_new0 (MonoGenericClass, 1);
gclass->inst = g_new0 (MonoGenericInst, 1);
gclass->inst->type_argc = type_argc;
@@ -8818,9 +8811,7 @@
MonoGenericClass *kgclass = klass->generic_class;
MonoGenericClass *ogclass = gclass;
- igclass = g_new0 (MonoInflatedGenericClass, 1);
- gclass = &igclass->generic_class;
- gclass->is_inflated = TRUE;
+ gclass = g_new0 (MonoGenericClass, 1);
gclass->inst = g_new0 (MonoGenericInst, 1);
gclass->inst->type_argc = kgclass->inst->type_argc;
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches