* class-internals.h (mono_get_inflated_generic_class): Remove.
authorRaja R Harinath <harinath@hurrynot.org>
Wed, 10 Jan 2007 19:03:27 +0000 (19:03 -0000)
committerRaja R Harinath <harinath@hurrynot.org>
Wed, 10 Jan 2007 19:03:27 +0000 (19:03 -0000)
* class.c (mono_get_inflated_generic_class): Remove.
(mono_generic_class_get_class): Rename from mono_class_create_generic.
(mono_class_from_mono_type) [GENERICINST]: Use it.
* reflection.c, metadata.c: Update to changes.  Use 'mono_class_from_mono_type'.

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

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

index 9d87a694e958f37d74850fc7e40f1766f9cd0e4d..d8c371c6fe58ed62339b78495cc8ba537a57deaf 100644 (file)
@@ -1,3 +1,12 @@
+2007-01-11  Raja R Harinath  <harinath@gmail.com>
+
+       * class-internals.h (mono_get_inflated_generic_class): Remove.
+       * class.c (mono_get_inflated_generic_class): Remove.
+       (mono_generic_class_get_class): Rename from
+       mono_class_create_generic.
+       (mono_class_from_mono_type) [GENERICINST]: Use it.
+       * reflection.c, metadata.c: Update to changes.  Use
+       'mono_class_from_mono_type'.
 
 Wed Jan 10 16:19:54 CET 2007 Paolo Molaro <lupus@ximian.com>
 
index 9065d878786dc918144fcdc2d45d41567eaea353..bb9b814010a843391a97c0f4af6e5520528e87a3 100644 (file)
@@ -651,13 +651,10 @@ mono_install_get_cached_class_info (MonoGetCachedClassInfo func) MONO_INTERNAL;
 void
 mono_install_get_class_from_name (MonoGetClassFromName func) MONO_INTERNAL;
 
-MonoInflatedGenericClass*
-mono_get_inflated_generic_class (MonoGenericClass *gclass) MONO_INTERNAL;
-
-MonoGenericContext *
+MonoGenericContext*
 mono_class_get_context (MonoClass *class) MONO_INTERNAL;
 
-MonoGenericContext *
+MonoGenericContext*
 mono_generic_class_get_context (MonoGenericClass *gclass) MONO_INTERNAL;
 
 MonoMethod*
index f3df5161c54e043fd981197694f7a24f0e2997da..8fb33ab2dde5dbe5a9debe11646758080ca2de35 100644 (file)
@@ -42,7 +42,6 @@ gboolean mono_print_vtable = FALSE;
 static MonoGetClassFromName get_class_from_name = NULL;
 
 static MonoClass * mono_class_create_from_typedef (MonoImage *image, guint32 type_token);
-static void mono_class_create_generic (MonoInflatedGenericClass *gclass);
 static gboolean mono_class_get_cached_class_info (MonoClass *klass, MonoCachedClassInfo *res);
 
 void (*mono_debugger_start_class_init_func) (MonoClass *klass) = NULL;
@@ -591,14 +590,6 @@ mono_class_get_context (MonoClass *class)
        return class->generic_class ? mono_generic_class_get_context (class->generic_class) : NULL;
 }
 
-MonoInflatedGenericClass*
-mono_get_inflated_generic_class (MonoGenericClass *gclass)
-{
-       g_assert (gclass->is_inflated);
-       mono_class_create_generic ((MonoInflatedGenericClass *) gclass);
-       return (MonoInflatedGenericClass *) gclass;
-}
-
 /*
  * mono_class_inflate_generic_type:
  * @type: a type
@@ -2388,11 +2379,7 @@ mono_class_init (MonoClass *class)
        mono_stats.initialized_class_count++;
 
        if (class->generic_class && !class->generic_class->is_dynamic) {
-               MonoInflatedGenericClass *gclass;
-               MonoClass *gklass;
-
-               gclass = mono_get_inflated_generic_class (class->generic_class);
-               gklass = gclass->generic_class.container_class;
+               MonoClass *gklass = class->generic_class->container_class;
 
                mono_stats.generic_class_count++;
 
@@ -2411,7 +2398,7 @@ mono_class_init (MonoClass *class)
 
                for (i = 0; i < class->method.count; i++) {
                        MonoMethod *inflated = mono_class_inflate_generic_method_full (
-                               gklass->methods [i], class, mono_generic_class_get_context ((MonoGenericClass *) gclass));
+                               gklass->methods [i], class, mono_class_get_context (class));
 
                        class->methods [i] = mono_get_inflated_method (inflated);
                }
@@ -2426,10 +2413,10 @@ mono_class_init (MonoClass *class)
 
                        if (prop->get)
                                prop->get = mono_class_inflate_generic_method_full (
-                                       prop->get, class, mono_generic_class_get_context ((MonoGenericClass *) gclass));
+                                       prop->get, class, mono_class_get_context (class));
                        if (prop->set)
                                prop->set = mono_class_inflate_generic_method_full (
-                                       prop->set, class, mono_generic_class_get_context ((MonoGenericClass *) gclass));
+                                       prop->set, class, mono_class_get_context (class));
 
                        prop->parent = class;
                }
@@ -3089,22 +3076,26 @@ mono_class_get_nullable_param (MonoClass *klass)
  * Create the `MonoClass' for an instantiation of a generic type.
  * We only do this if we actually need it.
  */
-static void
-mono_class_create_generic (MonoInflatedGenericClass *gclass)
+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 (gclass->klass) {
+       if (igclass->klass) {
                mono_loader_unlock ();
-               return;
+               return igclass->klass;
        }
 
-       gclass->klass = g_malloc0 (sizeof (MonoClass));
-       klass = gclass->klass;
+       igclass->klass = g_malloc0 (sizeof (MonoClass));
+       klass = igclass->klass;
 
-       gklass = gclass->generic_class.container_class;
+       gklass = gclass->container_class;
 
        if (gklass->nested_in) {
                /* 
@@ -3113,7 +3104,7 @@ mono_class_create_generic (MonoInflatedGenericClass *gclass)
                 * generic parameters...
                 */
                MonoType *inflated = mono_class_inflate_generic_type (
-                       &gklass->nested_in->byval_arg, mono_generic_class_get_context ((MonoGenericClass *) gclass));
+                       &gklass->nested_in->byval_arg, mono_generic_class_get_context (gclass));
                klass->nested_in = mono_class_from_mono_type (inflated);
        }
 
@@ -3123,10 +3114,10 @@ mono_class_create_generic (MonoInflatedGenericClass *gclass)
        klass->flags = gklass->flags;
        klass->type_token = gklass->type_token;
 
-       klass->generic_class = &gclass->generic_class;
+       klass->generic_class = gclass;
 
        klass->this_arg.type = klass->byval_arg.type = MONO_TYPE_GENERICINST;
-       klass->this_arg.data.generic_class = klass->byval_arg.data.generic_class = &gclass->generic_class;
+       klass->this_arg.data.generic_class = klass->byval_arg.data.generic_class = gclass;
        klass->this_arg.byref = TRUE;
 
        klass->cast_class = klass->element_class = klass;
@@ -3134,7 +3125,7 @@ mono_class_create_generic (MonoInflatedGenericClass *gclass)
        if (mono_class_is_nullable (klass))
                klass->cast_class = klass->element_class = mono_class_get_nullable_param (klass);
 
-       if (gclass->generic_class.is_dynamic) {
+       if (gclass->is_dynamic) {
                klass->instance_size = gklass->instance_size;
                klass->sizes.class_size = gklass->sizes.class_size;
                klass->size_inited = 1;
@@ -3149,8 +3140,7 @@ mono_class_create_generic (MonoInflatedGenericClass *gclass)
        klass->interfaces = g_new0 (MonoClass *, klass->interface_count);
        for (i = 0; i < klass->interface_count; i++) {
                MonoType *it = &gklass->interfaces [i]->byval_arg;
-               MonoType *inflated = mono_class_inflate_generic_type (
-                       it, mono_generic_class_get_context ((MonoGenericClass *) gclass));
+               MonoType *inflated = mono_class_inflate_generic_type (it, mono_generic_class_get_context (gclass));
                klass->interfaces [i] = mono_class_from_mono_type (inflated);
        }
 
@@ -3162,7 +3152,7 @@ mono_class_create_generic (MonoInflatedGenericClass *gclass)
 
        if (gklass->parent) {
                MonoType *inflated = mono_class_inflate_generic_type (
-                       &gklass->parent->byval_arg, mono_generic_class_get_context ((MonoGenericClass *) gclass));
+                       &gklass->parent->byval_arg, mono_generic_class_get_context (gclass));
 
                klass->parent = mono_class_from_mono_type (inflated);
        }
@@ -3174,6 +3164,8 @@ mono_class_create_generic (MonoInflatedGenericClass *gclass)
                setup_interface_offsets (klass, 0);
 
        mono_loader_unlock ();
+
+       return klass;
 }
 
 MonoClass *
@@ -3381,12 +3373,8 @@ mono_class_from_mono_type (MonoType *type)
        case MONO_TYPE_CLASS:
        case MONO_TYPE_VALUETYPE:
                return type->data.klass;
-       case MONO_TYPE_GENERICINST: {
-               MonoInflatedGenericClass *gclass;
-               gclass = mono_get_inflated_generic_class (type->data.generic_class);
-               g_assert (gclass->klass);
-               return gclass->klass;
-       }
+       case MONO_TYPE_GENERICINST:
+               return mono_generic_class_get_class (type->data.generic_class);
        case MONO_TYPE_VAR:
                return mono_class_from_generic_parameter (type->data.generic_param, NULL, FALSE);
        case MONO_TYPE_MVAR:
index 1bde1292ee3e798fac93d0e5db760b896f895b81..8de5ed410f2f8404ae8806f9819305718144e75a 100644 (file)
@@ -3228,20 +3228,16 @@ mono_type_size (MonoType *t, int *align)
        case MONO_TYPE_TYPEDBYREF:
                return mono_class_value_size (mono_defaults.typed_reference_class, align);
        case MONO_TYPE_GENERICINST: {
-               MonoInflatedGenericClass *gclass;
-               MonoClass *container_class;
+               MonoGenericClass *gclass = t->data.generic_class;
+               MonoClass *container_class = gclass->container_class;
 
-               gclass = mono_get_inflated_generic_class (t->data.generic_class);
-               // g_assert (!gclass->generic_class.inst->is_open);
-               // g_assert (!gclass->klass->generic_container);
-
-               container_class = gclass->generic_class.container_class;
+               // g_assert (!gclass->inst->is_open);
 
                if (container_class->valuetype) {
                        if (container_class->enumtype)
                                return mono_type_size (container_class->enum_basetype, align);
                        else
-                               return mono_class_value_size (gclass->klass, align);
+                               return mono_class_value_size (mono_class_from_mono_type (t), align);
                } else {
                        *align = __alignof__(gpointer);
                        return sizeof (gpointer);
@@ -3331,20 +3327,16 @@ mono_type_stack_size (MonoType *t, int *align)
                }
        }
        case MONO_TYPE_GENERICINST: {
-               MonoInflatedGenericClass *gclass;
-               MonoClass *container_class;
-
-               gclass = mono_get_inflated_generic_class (t->data.generic_class);
-               container_class = gclass->generic_class.container_class;
+               MonoGenericClass *gclass = t->data.generic_class;
+               MonoClass *container_class = gclass->container_class;
 
-               g_assert (!gclass->generic_class.inst->is_open);
-               g_assert (!gclass->klass->generic_container);
+               g_assert (!gclass->inst->is_open);
 
                if (container_class->valuetype) {
                        if (container_class->enumtype)
                                return mono_type_stack_size (container_class->enum_basetype, align);
                        else {
-                               guint32 size = mono_class_value_size (gclass->klass, align);
+                               guint32 size = mono_class_value_size (mono_class_from_mono_type (t), align);
 
                                *align = *align + __alignof__(gpointer) - 1;
                                *align &= ~(__alignof__(gpointer) - 1);
index 792750c6638726787f3a916adea5c1ecda0f71b6..ad5bce4e58497c8f86dbf742aec903ea11b517ff 100644 (file)
@@ -5441,8 +5441,7 @@ mono_generic_class_get_object (MonoDomain *domain, MonoType *geninst)
 {
        static MonoClass *System_Reflection_MonoGenericClass;
        MonoReflectionGenericClass *res;
-       MonoInflatedGenericClass *gclass;
-       MonoClass *gklass;
+       MonoClass *klass, *gklass;
 
        if (!System_Reflection_MonoGenericClass) {
                System_Reflection_MonoGenericClass = mono_class_from_name (
@@ -5450,11 +5449,10 @@ mono_generic_class_get_object (MonoDomain *domain, MonoType *geninst)
                g_assert (System_Reflection_MonoGenericClass);
        }
 
-       gclass = mono_get_inflated_generic_class (geninst->data.generic_class);
-       gklass = gclass->generic_class.container_class;
-       g_assert (gklass->generic_container);
+       klass = mono_class_from_mono_type (geninst);
+       gklass = klass->generic_class->container_class;
 
-       mono_class_init (gclass->klass);
+       mono_class_init (klass);
 
 #ifdef HAVE_SGEN_GC
        /* FIXME: allow unpinned later */
@@ -8969,19 +8967,18 @@ static MonoMethod *
 inflate_mono_method (MonoReflectionGenericClass *type, MonoMethod *method, MonoObject *obj)
 {
        MonoGenericMethod *gmethod = NULL;
-       MonoInflatedGenericClass *gclass;
        MonoGenericContext *context;
        MonoClass *klass;
        int i, n;
 
        klass = mono_class_from_mono_type (type->type.type);
-       gclass = mono_get_inflated_generic_class (type->type.type->data.generic_class);
-       n = mono_method_signature (method)->generic_param_count;
+       g_assert (klass->generic_class);
+       context = mono_class_get_context (klass);
 
-       context = mono_generic_class_get_context ((MonoGenericClass *) gclass);
+       n = mono_method_signature (method)->generic_param_count;
        if (n) {
                gmethod = g_new0 (MonoGenericMethod, 1);
-               gmethod->class_inst = gclass->generic_class.inst;
+               gmethod->class_inst = klass->generic_class->inst;
                gmethod->container = method->generic_container;
                MOVING_GC_REGISTER (&gmethod->reflection_info);
                gmethod->reflection_info = obj;
@@ -8996,10 +8993,10 @@ inflate_mono_method (MonoReflectionGenericClass *type, MonoMethod *method, MonoO
                        gmethod->inst->type_argv [i] = &gparam->pklass->byval_arg;
                }
 
-               g_assert (gmethod->container->parent == ((MonoGenericClass *)gclass)->container_class->generic_container);
+               g_assert (gmethod->container->parent == klass->generic_class->container_class->generic_container);
 
                context = g_new0 (MonoGenericContext, 1);
-               context->class_inst = gclass->generic_class.inst;
+               context->class_inst = klass->generic_class->inst;
                context->gmethod = gmethod;
        }