Thu Jun 20 11:49:00 CEST 2002 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Thu, 20 Jun 2002 06:04:02 +0000 (06:04 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Thu, 20 Jun 2002 06:04:02 +0000 (06:04 -0000)
* 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
mono/metadata/reflection.c
mono/metadata/row-indexes.h

index 2f76f35fa63c1452582fe57cb04b9033917a3c4c..6f18b51ad36e739075fa3847328a7664415ec441 100644 (file)
@@ -1,4 +1,10 @@
 
+Thu Jun 20 11:49:00 CEST 2002 Paolo Molaro <lupus@ximian.com>
+
+       * 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 <lupus@ximian.com>
 
        * reflection.c: fix entry point patching (thanks Serge!).
index aeafc20277b69b8ecdbdb8d7c6e72d28728915e4..0bc7479917d97645c0214f8cfd91dc8fc605d59f 100644 (file)
@@ -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);
 }
index 9595ee63415fbf714304f4f6b25360a0c7db9127..d611ffaa8079d67085ac97cbc07a8fe777d5ec26 100644 (file)
@@ -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 {