Author: martin
Date: 2005-06-23 09:05:46 -0400 (Thu, 23 Jun 2005)
New Revision: 46421

Modified:
   trunk/mono/mono/metadata/ChangeLog
   trunk/mono/mono/metadata/class-internals.h
   trunk/mono/mono/metadata/class.c
   trunk/mono/mono/metadata/metadata.c
Log:
2005-06-23  Martin Baulig  <[EMAIL PROTECTED]>

        Fix #75331.

        * metadata.c (mono_class_get_overrides): Renamed to
        mono_class_get_overrides_full() and added a `MonoGenericContext *'.
        (method_from_method_def_or_ref): Added `MonoGenericContext *' and
        pass it to mono_get_method_full().



Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog  2005-06-23 12:48:37 UTC (rev 46420)
+++ trunk/mono/mono/metadata/ChangeLog  2005-06-23 13:05:46 UTC (rev 46421)
@@ -1,3 +1,12 @@
+2005-06-23  Martin Baulig  <[EMAIL PROTECTED]>
+
+       Fix #75331.
+
+       * metadata.c (mono_class_get_overrides): Renamed to
+       mono_class_get_overrides_full() and added a `MonoGenericContext *'.
+       (method_from_method_def_or_ref): Added `MonoGenericContext *' and
+       pass it to mono_get_method_full().
+
 2005-06-22  Ben Maurer  <[EMAIL PROTECTED]>
 
        * reflection.c (mono_reflection_create_runtime_class): take the

Modified: trunk/mono/mono/metadata/class-internals.h
===================================================================
--- trunk/mono/mono/metadata/class-internals.h  2005-06-23 12:48:37 UTC (rev 
46420)
+++ trunk/mono/mono/metadata/class-internals.h  2005-06-23 13:05:46 UTC (rev 
46421)
@@ -491,7 +491,8 @@
 mono_class_is_open_constructed_type (MonoType *t);
 
 MonoMethod**
-mono_class_get_overrides   (MonoImage *image, guint32 type_token, gint32 
*num_overrides);
+mono_class_get_overrides_full (MonoImage *image, guint32 type_token, gint32 
*num_overrides,
+                              MonoGenericContext *generic_context);
 
 MonoMethod*
 mono_class_get_cctor (MonoClass *klass);

Modified: trunk/mono/mono/metadata/class.c
===================================================================
--- trunk/mono/mono/metadata/class.c    2005-06-23 12:48:37 UTC (rev 46420)
+++ trunk/mono/mono/metadata/class.c    2005-06-23 13:05:46 UTC (rev 46421)
@@ -1265,6 +1265,7 @@
 mono_class_setup_vtable (MonoClass *class)
 {
        MonoMethod **overrides;
+       MonoGenericContext *context;
        int onum = 0;
 
        if (class->vtable)
@@ -1282,7 +1283,13 @@
                return;
        }
 
-       overrides = mono_class_get_overrides (class->image, class->type_token, 
&onum);  
+       if (class->generic_class)
+               context = class->generic_class->context;
+       else
+               context = (MonoGenericContext *) class->generic_container;      
        
+
+       overrides = mono_class_get_overrides_full (
+               class->image, class->type_token, &onum, context);
        mono_class_setup_vtable_general (class, overrides, onum);
        g_free (overrides);
 

Modified: trunk/mono/mono/metadata/metadata.c
===================================================================
--- trunk/mono/mono/metadata/metadata.c 2005-06-23 12:48:37 UTC (rev 46420)
+++ trunk/mono/mono/metadata/metadata.c 2005-06-23 13:05:46 UTC (rev 46421)
@@ -3723,21 +3723,22 @@
 }
 
 static MonoMethod*
-method_from_method_def_or_ref (MonoImage *m, guint32 tok)
+method_from_method_def_or_ref (MonoImage *m, guint32 tok, MonoGenericContext 
*context)
 {
        guint32 idx = tok >> MONO_METHODDEFORREF_BITS;
        switch (tok & MONO_METHODDEFORREF_MASK) {
        case MONO_METHODDEFORREF_METHODDEF:
-               return mono_get_method (m, MONO_TOKEN_METHOD_DEF | idx, NULL);
+               return mono_get_method_full (m, MONO_TOKEN_METHOD_DEF | idx, 
NULL, context);
        case MONO_METHODDEFORREF_METHODREF:
-               return mono_get_method (m, MONO_TOKEN_MEMBER_REF | idx, NULL);
+               return mono_get_method_full (m, MONO_TOKEN_MEMBER_REF | idx, 
NULL, context);
        }
        g_assert_not_reached ();
        return NULL;
 }
 
 MonoMethod**
-mono_class_get_overrides (MonoImage *image, guint32 type_token, gint32 
*num_overrides)
+mono_class_get_overrides_full (MonoImage *image, guint32 type_token, gint32 
*num_overrides,
+                              MonoGenericContext *generic_context)
 {
        locator_t loc;
        MonoTableInfo *tdef  = &image->tables [MONO_TABLE_METHODIMPL];
@@ -3780,8 +3781,10 @@
        result = g_new (MonoMethod*, num * 2);
        for (i = 0; i < num; ++i) {
                mono_metadata_decode_row (tdef, start + i, cols, 
MONO_METHODIMPL_SIZE);
-               result [i * 2] = method_from_method_def_or_ref (image, cols 
[MONO_METHODIMPL_DECLARATION]);
-               result [i * 2 + 1] = method_from_method_def_or_ref (image, cols 
[MONO_METHODIMPL_BODY]);
+               result [i * 2] = method_from_method_def_or_ref (
+                       image, cols [MONO_METHODIMPL_DECLARATION], 
generic_context);
+               result [i * 2 + 1] = method_from_method_def_or_ref (
+                       image, cols [MONO_METHODIMPL_BODY], generic_context);
        }
 
        if (num_overrides)

_______________________________________________
Mono-patches maillist  -  Mono-patches@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to