Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJb Evain <jb@evain.net>2017-02-11 22:30:58 +0300
committerJb Evain <jb@evain.net>2017-02-11 22:30:58 +0300
commit6336522ebe1304cf1c5d57cc816c1aa36eca5b5b (patch)
treea7f1ce6ff513d3e8c485a361fef29176c59dc14c
parentcc917f04ec7d54915d374221c109526f1e215be2 (diff)
Do not require loading native pdb reader by default if we only find portable pdbs
-rw-r--r--Mono.Cecil.Cil/Symbols.cs36
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs (renamed from symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs)4
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs (renamed from symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs)4
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs29
4 files changed, 40 insertions, 33 deletions
diff --git a/Mono.Cecil.Cil/Symbols.cs b/Mono.Cecil.Cil/Symbols.cs
index b237ba7..c3c21ca 100644
--- a/Mono.Cecil.Cil/Symbols.cs
+++ b/Mono.Cecil.Cil/Symbols.cs
@@ -642,8 +642,11 @@ namespace Mono.Cecil.Cil {
public ISymbolReader GetSymbolReader (ModuleDefinition module, string fileName)
{
var pdb_file_name = Mixin.GetPdbFileName (fileName);
+
if (File.Exists (pdb_file_name))
- return SymbolProvider.GetReaderProvider (SymbolKind.Pdb).GetSymbolReader (module, fileName);
+ return Mixin.IsPortablePdb (Mixin.GetPdbFileName (fileName))
+ ? new PortablePdbReaderProvider ().GetSymbolReader (module, fileName)
+ : SymbolProvider.GetReaderProvider (SymbolKind.NativePdb).GetSymbolReader (module, fileName);
var mdb_file_name = Mixin.GetMdbFileName (fileName);
if (File.Exists (mdb_file_name))
@@ -664,8 +667,9 @@ namespace Mono.Cecil.Cil {
#if !PCL
enum SymbolKind {
- Pdb = 1,
- Mdb = 2,
+ NativePdb,
+ PortablePdb,
+ Mdb,
}
static class SymbolProvider {
@@ -744,8 +748,10 @@ namespace Mono.Cecil.Cil {
public static SymbolKind GetSymbolKind (Type type)
{
- if (type.Name.Contains (SymbolKind.Pdb.ToString ()))
- return SymbolKind.Pdb;
+ if (type.Name.Contains (SymbolKind.PortablePdb.ToString ()))
+ return SymbolKind.PortablePdb;
+ if (type.Name.Contains (SymbolKind.NativePdb.ToString ()))
+ return SymbolKind.NativePdb;
if (type.Name.Contains (SymbolKind.Mdb.ToString ()))
return SymbolKind.Mdb;
@@ -810,6 +816,26 @@ namespace Mono.Cecil {
{
return assemblyFileName + ".mdb";
}
+
+ public static bool IsPortablePdb (string fileName)
+ {
+ using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
+ return IsPortablePdb (file);
+ }
+
+ public static bool IsPortablePdb (Stream 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;
+ }
+ }
+
}
}
diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs b/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs
index 317a496..4ad1bc4 100644
--- a/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs
+++ b/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs
@@ -20,7 +20,7 @@ using Mono.Cecil.Cil;
namespace Mono.Cecil.Pdb {
- public class PdbReader : ISymbolReader {
+ public class NativePdbReader : ISymbolReader {
int age;
Guid guid;
@@ -29,7 +29,7 @@ namespace Mono.Cecil.Pdb {
readonly Dictionary<string, Document> documents = new Dictionary<string, Document> ();
readonly Dictionary<uint, PdbFunction> functions = new Dictionary<uint, PdbFunction> ();
- internal PdbReader (Disposable<Stream> file)
+ internal NativePdbReader (Disposable<Stream> file)
{
this.pdb_file = file;
}
diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs b/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs
index 553ef2f..28df637 100644
--- a/symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs
+++ b/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs
@@ -19,13 +19,13 @@ using Mono.Collections.Generic;
namespace Mono.Cecil.Pdb {
- public class PdbWriter : Cil.ISymbolWriter {
+ public class NativePdbWriter : Cil.ISymbolWriter {
readonly ModuleDefinition module;
readonly SymWriter writer;
readonly Dictionary<string, SymDocumentWriter> documents;
- internal PdbWriter (ModuleDefinition module, SymWriter writer)
+ internal NativePdbWriter (ModuleDefinition module, SymWriter writer)
{
this.module = module;
this.writer = writer;
diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs b/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs
index c397398..ced9729 100644
--- a/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs
+++ b/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs
@@ -22,7 +22,7 @@ namespace Mono.Cecil.Pdb {
Mixin.CheckModule (module);
Mixin.CheckFileName (fileName);
- return new PdbReader (Disposable.Owned (File.OpenRead (Mixin.GetPdbFileName (fileName)) as Stream));
+ return new NativePdbReader (Disposable.Owned (File.OpenRead (Mixin.GetPdbFileName (fileName)) as Stream));
}
public ISymbolReader GetSymbolReader (ModuleDefinition module, Stream symbolStream)
@@ -30,7 +30,7 @@ namespace Mono.Cecil.Pdb {
Mixin.CheckModule (module);
Mixin.CheckStream (symbolStream);
- return new PdbReader (Disposable.NotOwned (symbolStream));
+ return new NativePdbReader (Disposable.NotOwned (symbolStream));
}
}
@@ -41,7 +41,7 @@ namespace Mono.Cecil.Pdb {
Mixin.CheckModule (module);
Mixin.CheckFileName (fileName);
- return IsPortablePdb (Mixin.GetPdbFileName (fileName))
+ return Mixin.IsPortablePdb (Mixin.GetPdbFileName (fileName))
? new PortablePdbReaderProvider ().GetSymbolReader (module, fileName)
: new NativePdbReaderProvider ().GetSymbolReader (module, fileName);
}
@@ -52,29 +52,10 @@ namespace Mono.Cecil.Pdb {
Mixin.CheckStream (symbolStream);
Mixin.CheckReadSeek (symbolStream);
- return IsPortablePdb (symbolStream)
+ return Mixin.IsPortablePdb (symbolStream)
? new PortablePdbReaderProvider ().GetSymbolReader (module, symbolStream)
: new NativePdbReaderProvider ().GetSymbolReader (module, symbolStream);
}
-
- static bool IsPortablePdb (string fileName)
- {
- using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
- return IsPortablePdb (file);
- }
-
- static bool IsPortablePdb (Stream 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;
- }
- }
}
#if !READ_ONLY
@@ -86,7 +67,7 @@ namespace Mono.Cecil.Pdb {
Mixin.CheckModule (module);
Mixin.CheckFileName (fileName);
- return new PdbWriter (module, CreateWriter (module, Mixin.GetPdbFileName (fileName)));
+ return new NativePdbWriter (module, CreateWriter (module, Mixin.GetPdbFileName (fileName)));
}
static SymWriter CreateWriter (ModuleDefinition module, string pdb)