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:
authorMarek Safar <marek.safar@gmail.com>2016-11-24 14:03:52 +0300
committerMarek Safar <marek.safar@gmail.com>2016-11-24 14:03:52 +0300
commit74ab08331c603d45932fa825c49329e124c2c77a (patch)
tree202722861663ad5ab6487ddb22005e154200232b
parent41edb34a24f895d96b98523c35eb26327aedf33f (diff)
parent8a3eedc7ff08fd30484da5874d1e18db9f3ff7ab (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--Mono.Cecil.Cil/CodeReader.cs15
-rw-r--r--Mono.Cecil/AssemblyWriter.cs11
-rw-r--r--Mono.Cecil/MethodReference.cs3
-rw-r--r--symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs1
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs2
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs30
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs3
-rw-r--r--symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs7
-rw-r--r--symbols/pdb/Test/Resources/assemblies/empty-iterator.dllbin0 -> 4608 bytes
-rw-r--r--symbols/pdb/Test/Resources/assemblies/empty-iterator.pdbbin0 -> 11776 bytes
10 files changed, 53 insertions, 19 deletions
diff --git a/Mono.Cecil.Cil/CodeReader.cs b/Mono.Cecil.Cil/CodeReader.cs
index 56dae8d..893b1b3 100644
--- a/Mono.Cecil.Cil/CodeReader.cs
+++ b/Mono.Cecil.Cil/CodeReader.cs
@@ -159,17 +159,20 @@ namespace Mono.Cecil.Cil {
void ReadScope (ScopeDebugInformation scope)
{
- scope.Start = new InstructionOffset (GetInstruction (scope.Start.Offset));
+ var start_instruction = GetInstruction (scope.Start.Offset);
+ if (start_instruction != null)
+ scope.Start = new InstructionOffset (start_instruction);
var end_instruction = GetInstruction (scope.End.Offset);
- scope.End = end_instruction == null
- ? new InstructionOffset ()
- : new InstructionOffset (end_instruction);
+ if (end_instruction != null)
+ scope.End = new InstructionOffset (end_instruction);
if (!scope.variables.IsNullOrEmpty ()) {
for (int i = 0; i < scope.variables.Count; i++) {
- var variable = scope.variables [i];
- variable.index = new VariableIndex (GetVariable (variable.Index));
+ var variable_info = scope.variables [i];
+ var variable = GetVariable (variable_info.Index);
+ if (variable != null)
+ variable_info.index = new VariableIndex (variable);
}
}
diff --git a/Mono.Cecil/AssemblyWriter.cs b/Mono.Cecil/AssemblyWriter.cs
index a71c0ae..63176e4 100644
--- a/Mono.Cecil/AssemblyWriter.cs
+++ b/Mono.Cecil/AssemblyWriter.cs
@@ -85,6 +85,9 @@ namespace Mono.Cecil {
module.MetadataSystem.Clear ();
+ if (module.symbol_reader != null)
+ module.symbol_reader.Dispose ();
+
var name = module.assembly != null ? module.assembly.Name : null;
var fq_name = stream.value.GetFileName ();
var symbol_writer_provider = parameters.SymbolWriterProvider;
@@ -105,9 +108,6 @@ namespace Mono.Cecil {
BuildMetadata (module, metadata);
- if (module.symbol_reader != null)
- module.symbol_reader.Dispose ();
-
var writer = ImageWriter.CreateWriter (module, metadata, stream);
writer.WriteImage ();
@@ -2257,7 +2257,7 @@ namespace Mono.Cecil {
{
var rid = local_scope_table.AddRow (new LocalScopeRow (
method_info.Method.MetadataToken.RID,
- AddImportScope (scope.Import),
+ scope.import != null ? AddImportScope (scope.import) : 0,
local_variable_rid,
local_constant_rid,
(uint) scope.Start.Offset,
@@ -2273,9 +2273,6 @@ namespace Mono.Cecil {
if (scope.HasConstants)
AddLocalConstants (scope);
- if (scope.Import != null)
- AddImportScope (scope.Import);
-
for (int i = 0; i < scope.Scopes.Count; i++)
AddLocalScope (method_info, scope.Scopes [i]);
}
diff --git a/Mono.Cecil/MethodReference.cs b/Mono.Cecil/MethodReference.cs
index f8c7bb6..8e92479 100644
--- a/Mono.Cecil/MethodReference.cs
+++ b/Mono.Cecil/MethodReference.cs
@@ -122,6 +122,9 @@ namespace Mono.Cecil {
if (this.ReturnType.ContainsGenericParameter || base.ContainsGenericParameter)
return true;
+ if (!HasParameters)
+ return false;
+
var parameters = this.Parameters;
for (int i = 0; i < parameters.Count; i++)
diff --git a/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs b/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs
index 907d744..883028b 100644
--- a/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs
+++ b/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs
@@ -79,7 +79,6 @@ namespace Mono.Cecil.Tests {
foreach (var sp in info.SequencePoints)
Assert.AreEqual(@"C:\tmp\repropartial\BreakpointTest.Portable\TestService.cs", sp.Document.Url);
-
}, symbolReaderProvider: typeof(MdbReaderProvider), symbolWriterProvider: typeof(MdbWriterProvider));
}
}
diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs b/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs
index 6c08b3c..c397398 100644
--- a/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs
+++ b/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs
@@ -59,7 +59,7 @@ namespace Mono.Cecil.Pdb {
static bool IsPortablePdb (string fileName)
{
- using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.None))
+ using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
return IsPortablePdb (file);
}
diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs b/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs
index abd503d..317a496 100644
--- a/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs
+++ b/symbols/pdb/Mono.Cecil.Pdb/PdbReader.cs
@@ -104,11 +104,17 @@ namespace Mono.Cecil.Pdb {
ReadSequencePoints (function, symbol);
- if (function.scopes.Length > 1)
- throw new NotSupportedException ();
- else if (function.scopes.Length == 1)
+ if (!function.scopes.IsNullOrEmpty())
symbol.scope = ReadScopeAndLocals (function.scopes [0], symbol);
+ if (function.scopes.Length > 1) {
+ for (int i = 1; i < function.scopes.Length; i++) {
+ var s = ReadScopeAndLocals (function.scopes [i], symbol);
+ if (!AddScope (symbol.scope.Scopes, s))
+ symbol.scope.Scopes.Add (s);
+ }
+ }
+
return symbol;
}
@@ -133,6 +139,9 @@ namespace Mono.Cecil.Pdb {
parent.variables = new Collection<VariableDebugInformation> (scope.slots.Length);
foreach (PdbSlot slot in scope.slots) {
+ if (slot.flags == 1) // parameter names
+ continue;
+
var index = (int) slot.slot;
var variable = new VariableDebugInformation (index, slot.name);
if (slot.flags == 4)
@@ -157,6 +166,21 @@ namespace Mono.Cecil.Pdb {
return parent;
}
+ static bool AddScope (Collection<ScopeDebugInformation> scopes, ScopeDebugInformation scope)
+ {
+ foreach (var sub_scope in scopes) {
+ if (sub_scope.HasScopes && AddScope (sub_scope.Scopes, scope))
+ return true;
+
+ if (scope.Start.Offset >= sub_scope.Start.Offset && scope.End.Offset <= sub_scope.End.Offset) {
+ sub_scope.Scopes.Add (scope);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
void ReadSequencePoints (PdbFunction function, MethodDebugInformation info)
{
if (function.lines == null)
diff --git a/symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs b/symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs
index 1d827b7..553ef2f 100644
--- a/symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs
+++ b/symbols/pdb/Mono.Cecil.Pdb/PdbWriter.cs
@@ -45,7 +45,8 @@ namespace Mono.Cecil.Pdb {
writer.OpenMethod (sym_token);
- DefineSequencePoints (info.sequence_points);
+ if (!info.sequence_points.IsNullOrEmpty ())
+ DefineSequencePoints (info.sequence_points);
if (info.scope != null)
DefineScope (info.scope, info);
diff --git a/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs b/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs
index f8b4148..d11b0f9 100644
--- a/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs
+++ b/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs
@@ -148,6 +148,13 @@ namespace Mono.Cecil.Tests {
}
[Test]
+ public void EmptyEnumerable ()
+ {
+ TestModule ("empty-iterator.dll", module => {
+ }, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider));
+ }
+
+ [Test]
public void CreateMethodFromScratch ()
{
IgnoreOnMono ();
diff --git a/symbols/pdb/Test/Resources/assemblies/empty-iterator.dll b/symbols/pdb/Test/Resources/assemblies/empty-iterator.dll
new file mode 100644
index 0000000..7e9bcda
--- /dev/null
+++ b/symbols/pdb/Test/Resources/assemblies/empty-iterator.dll
Binary files differ
diff --git a/symbols/pdb/Test/Resources/assemblies/empty-iterator.pdb b/symbols/pdb/Test/Resources/assemblies/empty-iterator.pdb
new file mode 100644
index 0000000..42f57a6
--- /dev/null
+++ b/symbols/pdb/Test/Resources/assemblies/empty-iterator.pdb
Binary files differ