From 7c8e1ad42527080fabf8832aba03e184bf965b29 Mon Sep 17 00:00:00 2001 From: Jb Evain Date: Fri, 17 Mar 2017 11:17:03 -0700 Subject: Make symbols readers and writers provide their counter part --- Mono.Cecil.Cil/PortablePdb.cs | 20 ++++++++++++++++++++ Mono.Cecil.Cil/Symbols.cs | 43 ++++++++----------------------------------- 2 files changed, 28 insertions(+), 35 deletions(-) (limited to 'Mono.Cecil.Cil') diff --git a/Mono.Cecil.Cil/PortablePdb.cs b/Mono.Cecil.Cil/PortablePdb.cs index b979c7d..7deddae 100644 --- a/Mono.Cecil.Cil/PortablePdb.cs +++ b/Mono.Cecil.Cil/PortablePdb.cs @@ -65,6 +65,11 @@ namespace Mono.Cecil.Cil { this.debug_reader = new MetadataReader (image, module, this.reader); } + public ISymbolWriterProvider GetWriterProvider () + { + return new PortablePdbWriterProvider (); + } + public bool ProcessDebugHeader (ImageDebugHeader header) { if (image == module.Image) @@ -192,6 +197,11 @@ namespace Mono.Cecil.Cil { this.reader = reader; } + public ISymbolWriterProvider GetWriterProvider () + { + return new EmbeddedPortablePdbWriterProvider (); + } + public bool ProcessDebugHeader (ImageDebugHeader header) { return reader.ProcessDebugHeader (header); @@ -275,6 +285,11 @@ namespace Mono.Cecil.Cil { this.pdb_metadata.metadata_builder = metadata; } + public ISymbolReaderProvider GetReaderProvider () + { + return new PortablePdbReaderProvider (); + } + public ImageDebugHeader GetDebugHeader () { if (IsEmbedded) @@ -414,6 +429,11 @@ namespace Mono.Cecil.Cil { this.writer = writer; } + public ISymbolReaderProvider GetReaderProvider () + { + return new EmbeddedPortablePdbReaderProvider (); + } + public ImageDebugHeader GetDebugHeader () { writer.Dispose (); diff --git a/Mono.Cecil.Cil/Symbols.cs b/Mono.Cecil.Cil/Symbols.cs index 4dc0b10..c64ecec 100644 --- a/Mono.Cecil.Cil/Symbols.cs +++ b/Mono.Cecil.Cil/Symbols.cs @@ -678,6 +678,7 @@ namespace Mono.Cecil.Cil { public interface ISymbolReader : IDisposable { + ISymbolWriterProvider GetWriterProvider (); bool ProcessDebugHeader (ImageDebugHeader header); MethodDebugInformation Read (MethodDefinition method); } @@ -796,11 +797,13 @@ namespace Mono.Cecil.Cil { { if (kind == SymbolKind.PortablePdb) return new PortablePdbReaderProvider (); + if (kind == SymbolKind.EmbeddedPortablePdb) + return new EmbeddedPortablePdbReaderProvider (); - var providerName = GetSymbolTypeName (kind, "ReaderProvider"); - var type = GetSymbolType (kind, providerName); + var provider_name = GetSymbolTypeName (kind, "ReaderProvider"); + var type = GetSymbolType (kind, provider_name); if (type == null) - throw new TypeLoadException ("Could not find symbol provider type " + providerName); + throw new TypeLoadException ("Could not find symbol provider type " + provider_name); return (ISymbolReaderProvider) Activator.CreateInstance (type); } @@ -822,36 +825,6 @@ namespace Mono.Cecil.Cil { throw new ArgumentException (); } - -#if !READ_ONLY - - public static ISymbolWriterProvider GetWriterProvider (SymbolKind kind) - { - if (kind == SymbolKind.PortablePdb) - return new PortablePdbWriterProvider (); - - var type = GetSymbolType (kind, GetSymbolTypeName (kind, "WriterProvider")); - if (type == null) - return null; - - return (ISymbolWriterProvider) Activator.CreateInstance (type); - } - - public static SymbolKind GetSymbolKind (Type type) - { - if (type.Name.Contains (SymbolKind.EmbeddedPortablePdb.ToString ())) - return SymbolKind.EmbeddedPortablePdb; - 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; - - throw new ArgumentException (); - } - -#endif } #endif @@ -859,6 +832,7 @@ namespace Mono.Cecil.Cil { public interface ISymbolWriter : IDisposable { + ISymbolReaderProvider GetReaderProvider (); ImageDebugHeader GetDebugHeader (); void Write (MethodDebugInformation info); } @@ -883,8 +857,7 @@ namespace Mono.Cecil.Cil { if (module.Image != null && module.Image.HasDebugTables ()) return null; - var reader_kind = SymbolProvider.GetSymbolKind (reader.GetType ()); - return SymbolProvider.GetWriterProvider (reader_kind).GetSymbolWriter (module, fileName); + return reader.GetWriterProvider ().GetSymbolWriter (module, fileName); } public ISymbolWriter GetSymbolWriter (ModuleDefinition module, Stream symbolStream) -- cgit v1.2.3