From 6e12f242b39b4b794459995db51f50e583ba0b56 Mon Sep 17 00:00:00 2001 From: Paolo Molaro Date: Thu, 20 Jun 2002 06:04:02 +0000 Subject: [PATCH] Thu Jun 20 11:49:00 CEST 2002 Paolo Molaro * row-indexes.h: fix typos. * reflection.c: adjust for typos and fix method_def_or_ref encoding in MethodImpl table. svn path=/trunk/mono/; revision=5354 --- mono/metadata/ChangeLog | 6 ++++++ mono/metadata/reflection.c | 25 ++++++++++++++++--------- mono/metadata/row-indexes.h | 8 ++++---- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/mono/metadata/ChangeLog b/mono/metadata/ChangeLog index 2f76f35fa63..6f18b51ad36 100644 --- a/mono/metadata/ChangeLog +++ b/mono/metadata/ChangeLog @@ -1,4 +1,10 @@ +Thu Jun 20 11:49:00 CEST 2002 Paolo Molaro + + * row-indexes.h: fix typos. + * reflection.c: adjust for typos and fix method_def_or_ref + encoding in MethodImpl table. + Wed Jun 19 21:57:30 CEST 2002 Paolo Molaro * reflection.c: fix entry point patching (thanks Serge!). diff --git a/mono/metadata/reflection.c b/mono/metadata/reflection.c index aeafc20277b..0bc7479917d 100644 --- a/mono/metadata/reflection.c +++ b/mono/metadata/reflection.c @@ -75,7 +75,7 @@ const unsigned char table_sizes [64] = { 0, MONO_PROPERTY_SIZE, MONO_METHOD_SEMA_SIZE, - MONO_MTHODIMPL_SIZE, + MONO_METHODIMPL_SIZE, MONO_MODULEREF_SIZE, /* 0x1A */ MONO_TYPESPEC_SIZE, MONO_IMPLMAP_SIZE, @@ -711,18 +711,25 @@ mono_image_get_method_info (MonoReflectionMethodBuilder *mb, MonoDynamicAssembly } if (mb->override_method) { MonoReflectionTypeBuilder *tb = (MonoReflectionTypeBuilder *)mb->type; + guint32 tok; table = &assembly->tables [MONO_TABLE_METHODIMPL]; table->rows ++; alloc_table (table, table->rows); - values = table->values + table->rows * MONO_MTHODIMPL_SIZE; - values [MONO_MTHODIMPL_CLASS] = tb->table_idx; - values [MONO_MTHODIMPL_BODY] = METHODDEFORREF_METHODDEF | (mb->table_idx << METHODDEFORREF_BITS); - if (mb->override_method->method) - values [MONO_MTHODIMPL_DECLARATION] = mono_image_get_methodref_token (assembly, mb->override_method->method); - else { - MonoReflectionMethodBuilder *omb = (MonoReflectionMethodBuilder*)mb->override_method; - values [MONO_MTHODIMPL_DECLARATION] = METHODDEFORREF_METHODDEF | (omb->table_idx << METHODDEFORREF_BITS); + values = table->values + table->rows * MONO_METHODIMPL_SIZE; + values [MONO_METHODIMPL_CLASS] = tb->table_idx; + values [MONO_METHODIMPL_BODY] = METHODDEFORREF_METHODDEF | (mb->table_idx << METHODDEFORREF_BITS); + tok = mono_image_create_token (assembly, (MonoObject*)mb->override_method); + switch (mono_metadata_token_table (tok)) { + case MONO_TABLE_MEMBERREF: + tok = (mono_metadata_token_index (tok) << METHODDEFORREF_BITS ) | METHODDEFORREF_METHODREF; + break; + case MONO_TABLE_METHOD: + tok = (mono_metadata_token_index (tok) << METHODDEFORREF_BITS ) | METHODDEFORREF_METHODDEF; + break; + default: + g_assert_not_reached (); } + values [MONO_METHODIMPL_DECLARATION] = tok; } mono_image_add_cattrs (assembly, mb->table_idx, CUSTOM_ATTR_METHODDEF, mb->cattrs); } diff --git a/mono/metadata/row-indexes.h b/mono/metadata/row-indexes.h index 9595ee63415..d611ffaa807 100644 --- a/mono/metadata/row-indexes.h +++ b/mono/metadata/row-indexes.h @@ -182,10 +182,10 @@ enum { }; enum { - MONO_MTHODIMPL_CLASS, - MONO_MTHODIMPL_BODY, - MONO_MTHODIMPL_DECLARATION, - MONO_MTHODIMPL_SIZE + MONO_METHODIMPL_CLASS, + MONO_METHODIMPL_BODY, + MONO_METHODIMPL_DECLARATION, + MONO_METHODIMPL_SIZE }; enum { -- 2.25.1