* class-internals.h (_MonoGenericClass.is_inflated): Remove.
authorRaja R Harinath <harinath@hurrynot.org>
Thu, 11 Jan 2007 09:46:00 +0000 (09:46 -0000)
committerRaja R Harinath <harinath@hurrynot.org>
Thu, 11 Jan 2007 09:46:00 +0000 (09:46 -0000)
(_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.

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

mono/metadata/ChangeLog
mono/metadata/class-internals.h
mono/metadata/class.c
mono/metadata/icall.c
mono/metadata/metadata.c
mono/metadata/metadata.h
mono/metadata/reflection.c

index 5e451ff7bae59a06f2cdd36267222dbb7398843c..af53e875ba2cb20b3491ccc879bb3fa048f61c45 100644 (file)
@@ -1,5 +1,12 @@
 2007-01-11  Raja R Harinath  <rharinath@novell.com>
 
+       * 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.
index bb9b814010a843391a97c0f4af6e5520528e87a3..c383f380801bbcc7f8d2d46f75b2d97d6f72a5d8 100644 (file)
@@ -395,17 +395,7 @@ struct _MonoGenericClass {
        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 */
-};
-
-/*
- * Performance optimization:
- * We don't create the `MonoClass' for a `MonoGenericClass' until we really
- * need it.
- */
-struct _MonoInflatedGenericClass {
-       MonoGenericClass generic_class;
-       MonoClass *klass;
+       MonoClass *cached_class;        /* if present, the MonoClass corresponding to the instantiation.  */
 };
 
 /*
@@ -413,7 +403,7 @@ struct _MonoInflatedGenericClass {
  * a TypeBuilder.
  */
 struct _MonoDynamicGenericClass {
-       MonoInflatedGenericClass generic_class;
+       MonoGenericClass generic_class;
        int count_methods;
        MonoMethod **methods;
        int count_ctors;
index 8fb33ab2dde5dbe5a9debe11646758080ca2de35..5af91ae73f815272150485bfd94acc8852d506f4 100644 (file)
@@ -454,7 +454,6 @@ mono_class_is_open_constructed_type (MonoType *t)
 static MonoGenericClass *
 inflate_generic_class (MonoGenericClass *ogclass, MonoGenericContext *context)
 {
-       MonoInflatedGenericClass *igclass;
        MonoGenericClass *ngclass, *cached;
        MonoGenericInst *ninst;
 
@@ -464,21 +463,15 @@ inflate_generic_class (MonoGenericClass *ogclass, MonoGenericContext *context)
 
        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 @@ mono_get_shared_generic_inst (MonoGenericContainer *container)
 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 @@ mono_get_shared_generic_class (MonoGenericContainer *container, gboolean is_dyna
                }
        }
 
-       igclass->klass = container->klass;
+       gclass->cached_class = container->klass;
 
        return gclass;
 }
@@ -3079,21 +3067,17 @@ mono_class_get_nullable_param (MonoClass *klass)
 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;
 
index 971fd1914276be965e1ec7ba3d1517d89aa97685..ba751ebe2e48260fabec7d50ecc038e02e98a918 100644 (file)
@@ -2163,7 +2163,7 @@ static MonoArray*
 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 @@ ves_icall_MonoGenericClass_GetInterfaces (MonoReflectionGenericClass *type)
 
        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 @@ ves_icall_MonoGenericClass_GetInterfaces (MonoReflectionGenericClass *type)
                } 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);
index 8de5ed410f2f8404ae8806f9819305718144e75a..bdc527af18efc30b4134a227b525db805db19cd7 100644 (file)
@@ -2012,15 +2012,12 @@ static gboolean
 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 @@ do_mono_metadata_parse_generic_class (MonoType *type, MonoImage *m, MonoGenericC
 
        cached = g_hash_table_lookup (generic_class_cache, gclass);
        if (cached) {
-               g_free (igclass->klass);
                g_free (gclass);
 
                type->data.generic_class = cached;
index 8fb6e13459337c429f8b8f5459d2418c0918f651..e32dccf9b5162990e9ee8631fb7c83bba8b9357b 100644 (file)
@@ -291,7 +291,6 @@ typedef struct {
 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;
index 5f071c1ba32c0f4aaf2ae26199cfa3d62f1aa82f..6fa38800cde7c46c54a63209a79c8a9bddeddb1a 100644 (file)
@@ -8726,14 +8726,10 @@ mono_reflection_bind_generic_parameters (MonoReflectionType *type, int type_argc
 
        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 @@ mono_class_bind_generic_parameters (MonoType *type, int type_argc, MonoType **ty
 {
        MonoClass *klass;
        MonoGenericClass *gclass, *cached;
-       MonoInflatedGenericClass *igclass;
        MonoType *geninst;
        int i;
 
@@ -8790,9 +8785,7 @@ mono_class_bind_generic_parameters (MonoType *type, int type_argc, MonoType **ty
 
        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 @@ mono_class_bind_generic_parameters (MonoType *type, int type_argc, MonoType **ty
                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;