2010-04-09 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Fri, 9 Apr 2010 13:12:41 +0000 (13:12 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Fri, 9 Apr 2010 13:12:41 +0000 (13:12 -0000)
* metadata-verify.c (is_valid_standalonesig_blob): Accept
fields as valid standalone sig too. F# does generate them.

* metadata-verify.c (verify_typedef_table_full): Ignore
what <module> extends.

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

mono/metadata/ChangeLog
mono/metadata/metadata-verify.c

index 39f67829ea4aaeafb3501f9e0b3723211b623802..fbe29d52ca805b84b69d8fcb79df38158cac8132 100644 (file)
@@ -1,3 +1,11 @@
+2010-04-09 Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * metadata-verify.c (is_valid_standalonesig_blob): Accept
+       fields as valid standalone sig too. F# does generate them.
+
+       * metadata-verify.c (verify_typedef_table_full): Ignore
+       what <module> extends.
+
 2010-04-09 Rodrigo Kumpera  <rkumpera@novell.com>
 
        * verify.c (do_invoke_method): It's ok to do use call with
index cb3f5829f77138708c11354b362c6f0f004572fd..0ffb428a92d5b64c8396455bea201d06e2f82540 100644 (file)
@@ -1695,6 +1695,11 @@ is_valid_standalonesig_blob (VerifyContext *ctx, guint32 offset)
        --ptr;
        if (signature == 0x07)
                return parse_locals_signature (ctx, &ptr, end);
+
+       /*F# and managed C++ produce standalonesig for fields even thou the spec doesn't mention it.*/
+       if (signature == 0x06)
+               return parse_field (ctx, &ptr, end);
+
        return parse_method_signature (ctx, &ptr, end, TRUE, TRUE);
 }
 
@@ -2106,8 +2111,10 @@ verify_typedef_table_full (VerifyContext *ctx)
                mono_metadata_decode_row (table, i, data, MONO_TYPEDEF_SIZE);
 
                if (i == 0) {
-                       if (data [MONO_TYPEDEF_EXTENDS] != 0)
+                       /*XXX it's ok if <module> extends object, or anything at all, actually. */
+                       /*if (data [MONO_TYPEDEF_EXTENDS] != 0)
                                ADD_ERROR (ctx, g_strdup_printf ("Invalid typedef row 0 for the special <module> type must have a null extend field"));
+                       */
                        continue;
                }