diff options
author | Jb Evain <jb@evain.net> | 2017-11-17 02:37:22 +0300 |
---|---|---|
committer | Jb Evain <jb@evain.net> | 2017-11-17 02:37:22 +0300 |
commit | 0ef6b79e12b97bea36d12eb5700d0677148a2369 (patch) | |
tree | eb3f3a1787a6e44e5e96328252a9750304088b8f /symbols | |
parent | 1e47c7a228b081aec1e9db02f0433a97ca7b407b (diff) |
Fix #461: wrong StateMachineScopeDebugInformation API
Diffstat (limited to 'symbols')
-rw-r--r-- | symbols/pdb/Mono.Cecil.Pdb/NativePdbReader.cs | 12 | ||||
-rw-r--r-- | symbols/pdb/Mono.Cecil.Pdb/NativePdbWriter.cs | 11 | ||||
-rw-r--r-- | symbols/pdb/Test/Mono.Cecil.Tests/PdbTests.cs | 5 |
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); |