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