Merge pull request #4262 from kumpera/fix-windows
authorRodrigo Kumpera <kumpera@users.noreply.github.com>
Wed, 18 Jan 2017 18:18:41 +0000 (13:18 -0500)
committerGitHub <noreply@github.com>
Wed, 18 Jan 2017 18:18:41 +0000 (13:18 -0500)
Fix the windows build.

mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs
mcs/tools/pdb2mdb/Driver.cs
mono/metadata/handle.c
mono/metadata/icall.c

index 6d056da47a33590723a552c93aeef3711b577dd9..19be52d9a91b4b96f644a19d9b239df623d3ac66 100644 (file)
@@ -11248,5 +11248,18 @@ namespace MonoTests.System.Reflection.Emit
                        Assert.Throws<TypeLoadException> (delegate { var ft = r.GetField("sr").FieldType; });
                }
                
+               [Test]
+               public void GetGenericTypeDefinitionAfterCreateReturnsBuilder () {
+                       var aname = new AssemblyName ("genericDefnAfterCreate");
+                       var ab = AppDomain.CurrentDomain.DefineDynamicAssembly (aname, AssemblyBuilderAccess.Run);
+                       var mb = ab.DefineDynamicModule (aname.Name);
+                       var buildX = mb.DefineType ("X", TypeAttributes.Public);
+                       buildX.DefineGenericParameters ("T", "U");
+                       var x = buildX.CreateType ();
+                       var inst = x.MakeGenericType (typeof (string), typeof (int));
+                       var defX = inst.GetGenericTypeDefinition ();
+
+                       Assert.AreSame (buildX, defX);
+               }
        }
 }
index 93d9e8a4544535b8f1c568064365d818bebbf195..5aa1fcf0b5b06bd3e9be20fb30f9da4514a6f9cb 100644 (file)
@@ -33,12 +33,31 @@ namespace Pdb2Mdb {
                        var pdb = asm.Name.Name + ".pdb";
                        pdb = Path.Combine (Path.GetDirectoryName (filename), pdb);
 
+                       if (!File.Exists (pdb))
+                               throw new FileNotFoundException ("PDB file doesn't exist: " + pdb);
+
                        using (var stream = File.OpenRead (pdb)) {
+                               if (IsPortablePdb (stream))
+                                       throw new PortablePdbNotSupportedException ();
+
                                var funcs = PdbFile.LoadFunctions (stream, true);
                                Converter.Convert (asm, funcs, new MonoSymbolWriter (filename));
                        }
                }
 
+               static bool IsPortablePdb (FileStream stream)
+               {
+                       const uint ppdb_signature = 0x424a5342;
+
+                       var position = stream.Position;
+                       try {
+                               var reader = new BinaryReader (stream);
+                               return reader.ReadUInt32 () == ppdb_signature;
+                       } finally {
+                               stream.Position = position;
+                       }
+               }
+
                internal Converter (MonoSymbolWriter mdb)
                {
                        this.mdb = mdb;
@@ -158,6 +177,9 @@ namespace Pdb2Mdb {
                }
        }
 
+       public class PortablePdbNotSupportedException : Exception {
+       }
+
        class Driver {
 
                static void Main (string [] args)
@@ -170,25 +192,16 @@ namespace Pdb2Mdb {
                        if (!File.Exists (asm))
                                Usage ();
 
-                       var assembly = AssemblyDefinition.ReadAssembly (asm);
-
-                       var pdb = assembly.Name.Name + ".pdb";
-                       pdb = Path.Combine (Path.GetDirectoryName (asm), pdb);
-
-                       if (!File.Exists (pdb))
+                       try {
+                               Converter.Convert (asm);
+                       } catch (FileNotFoundException ex) {
                                Usage ();
-
-                       using (var stream = File.OpenRead (pdb)) {
-                               Convert (assembly, stream, new MonoSymbolWriter (asm));
+                       } catch (PortablePdbNotSupportedException) {
+                               Console.WriteLine ("Error: A portable PDB can't be converted to mdb.");
+                               Environment.Exit (2);
                        }
-               }
-
-               static void Convert (AssemblyDefinition assembly, Stream pdb, MonoSymbolWriter mdb)
-               {
-                       try {
-                               Converter.Convert (assembly, PdbFile.LoadFunctions (pdb, true), mdb);
-                       } catch (Exception e) {
-                               Error (e);
+                       catch (Exception ex) {
+                               Error (ex);
                        }
                }
 
@@ -204,6 +217,8 @@ namespace Pdb2Mdb {
                {
                        Console.WriteLine ("Fatal error:");
                        Console.WriteLine (e);
+
+                       Environment.Exit (1);
                }
        }
 }
index 372ca0b56c097f06e8b252da6b8dafb30aacea3e..7df0184a31f1266a3203035a5e1fd62197d6e780 100644 (file)
@@ -265,7 +265,7 @@ mono_gchandle_from_handle (MonoObjectHandle handle, mono_bool pinned)
 MonoObjectHandle
 mono_gchandle_get_target_handle (uint32_t gchandle)
 {
-       return MONO_HANDLE_NEW (MonoObject, mono_gchandle_get_target);
+       return MONO_HANDLE_NEW (MonoObject, mono_gchandle_get_target (gchandle));
 }
 
 gpointer
index 477a30a99c87a8b29019695440385fd38736d71f..3d772e9a09200d6d3be7b140961a2ca359bd5379 100644 (file)
@@ -2796,7 +2796,7 @@ ves_icall_RuntimeTypeHandle_GetGenericTypeDefinition_impl (MonoReflectionTypeHan
        if (mono_class_is_ginst (klass)) {
                MonoClass *generic_class = mono_class_get_generic_class (klass)->container_class;
 
-               guint32 ref_info_handle = mono_class_get_ref_info_handle (klass);
+               guint32 ref_info_handle = mono_class_get_ref_info_handle (generic_class);
                
                if (generic_class->wastypebuilder && ref_info_handle) {
                        MonoObjectHandle tb = mono_gchandle_get_target_handle (ref_info_handle);