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

Reply via email to