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-11-17 02:37:22 +0300
committerJb Evain <jb@evain.net>2017-11-17 02:37:22 +0300
commit0ef6b79e12b97bea36d12eb5700d0677148a2369 (patch)
treeeb3f3a1787a6e44e5e96328252a9750304088b8f /symbols
parent1e47c7a228b081aec1e9db02f0433a97ca7b407b (diff)
Fix #461: wrong StateMachineScopeDebugInformation API
Diffstat (limited to 'symbols')
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs12
-rw-r--r--symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs11
-rw-r--r--symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs5
3 files changed, 18 insertions, 10 deletions
diff --git a/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs b/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs
index 4d9c606..964f4ad 100644
--- a/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs
+++ b/symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs
@@ -137,9 +137,15 @@ namespace Mono.Cecil.Pdb {
}
}
- if (function.iteratorScopes != null)
- foreach (var iterator_scope in function.iteratorScopes)
- symbol.CustomDebugInformations.Add (new StateMachineScopeDebugInformation ((int) iterator_scope.Offset, (int) (iterator_scope.Offset + iterator_scope.Length + 1)));
+ if (function.iteratorScopes != null) {
+ var state_machine = new StateMachineScopeDebugInformation ();
+
+ foreach (var iterator_scope in function.iteratorScopes) {
+ state_machine.Scopes.Add (new StateMachineScope ((int) iterator_scope.Offset, (int) (iterator_scope.Offset + iterator_scope.Length + 1)));
+ }
+
+ symbol.CustomDebugInformations.Add (state_machine);
+ }
if (function.synchronizationInformation != null) {
var async_debug_info = new AsyncMethodBodyDebugInformation ((int) function.synchronizationInformation.GeneratedCatchHandlerOffset);
diff --git a/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs b/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs
index 6e766e0..be871ac 100644
--- a/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs
+++ b/symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs
@@ -111,10 +111,10 @@ namespace Mono.Cecil.Pdb {
}
if (info.HasCustomDebugInformations) {
- var scopes = info.CustomDebugInformations.OfType<StateMachineScopeDebugInformation> ().ToArray ();
+ var state_machine = info.CustomDebugInformations.FirstOrDefault (cdi => cdi.Kind == CustomDebugInformationKind.StateMachineScope) as StateMachineScopeDebugInformation;
- if (scopes.Length > 0)
- metadata.WriteIteratorScopes (scopes, info);
+ if (state_machine != null)
+ metadata.WriteIteratorScopes (state_machine, info);
}
metadata.WriteCustomMetadata ();
@@ -312,10 +312,11 @@ namespace Mono.Cecil.Pdb {
Write (CustomMetadataType.ForwardInfo, () => writer.WriteUInt32 (import_parent.ToUInt32 ()));
}
- public void WriteIteratorScopes (StateMachineScopeDebugInformation [] scopes, MethodDebugInformation debug_info)
+ public void WriteIteratorScopes (StateMachineScopeDebugInformation state_machine, MethodDebugInformation debug_info)
{
Write (CustomMetadataType.IteratorScopes, () => {
- writer.WriteInt32 (scopes.Length);
+ var scopes = state_machine.Scopes;
+ writer.WriteInt32 (scopes.Count);
foreach (var scope in scopes) {
var start = scope.Start.Offset;
var end = scope.End.IsEndOfMethod ? debug_info.code_size : scope.End.Offset;
diff --git a/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs b/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs
index f5adb0c..b6fdcdf 100644
--- a/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs
+++ b/symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs
@@ -354,8 +354,9 @@ namespace Mono.Cecil.Tests {
var state_machine_scope = move_next.DebugInformation.CustomDebugInformations [0] as StateMachineScopeDebugInformation;
Assert.IsNotNull (state_machine_scope);
- Assert.AreEqual (142, state_machine_scope.Start.Offset);
- Assert.AreEqual (319, state_machine_scope.End.Offset);
+ Assert.AreEqual (1, state_machine_scope.Scopes.Count);
+ Assert.AreEqual (142, state_machine_scope.Scopes [0].Start.Offset);
+ Assert.AreEqual (319, state_machine_scope.Scopes [0].End.Offset);
var async_body = move_next.DebugInformation.CustomDebugInformations [1] as AsyncMethodBodyDebugInformation;
Assert.IsNotNull (async_body);