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);
+ }
}
}
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;
}
}
+ public class PortablePdbNotSupportedException : Exception {
+ }
+
class Driver {
static void Main (string [] args)
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);
}
}
{
Console.WriteLine ("Fatal error:");
Console.WriteLine (e);
+
+ Environment.Exit (1);
}
}
}
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);