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>2015-03-21 00:12:28 +0300
committerJb Evain <jb@evain.net>2015-03-21 00:12:28 +0300
commit7826271ad97c5120c74bce30b7cc911464447475 (patch)
treef313f25952042968b4882cc9f1065f9ce72204c2 /symbols
parent3f697eb61052afcd05d40320fe30324e6da2834e (diff)
Add support for reading/writing new mdb info
Diffstat (limited to 'symbols')
-rw-r--r--symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs35
-rw-r--r--symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs17
-rw-r--r--symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs12
3 files changed, 45 insertions, 19 deletions
diff --git a/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs b/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs
index 658e9f3..1da6653 100644
--- a/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs
+++ b/symbols/mdb/Mono.Cecil.Mdb/MdbReader.cs
@@ -124,10 +124,7 @@ namespace Mono.Cecil.Mdb {
if (document == null)
document = GetDocument (entry.CompileUnit.SourceFile);
- instruction.SequencePoint = new SequencePoint (document) {
- StartLine = line.Row,
- EndLine = line.Row,
- };
+ instruction.SequencePoint = LineToSequencePoint (line, entry, document);
}
}
@@ -205,10 +202,9 @@ namespace Mono.Cecil.Mdb {
for (int i = 0; i < lines.Length; i++) {
var line = lines [i];
- instructions.Add (new InstructionSymbol (line.Offset, new SequencePoint (GetDocument (entry.CompileUnit.SourceFile)) {
- StartLine = line.Row,
- EndLine = line.Row,
- }));
+ instructions.Add (new InstructionSymbol (
+ line.Offset,
+ LineToSequencePoint (line, entry, GetDocument (entry.CompileUnit.SourceFile))));
}
}
@@ -223,9 +219,32 @@ namespace Mono.Cecil.Mdb {
}
}
+ static SequencePoint LineToSequencePoint (LineNumberEntry line, MethodEntry entry, Document document)
+ {
+ return new SequencePoint (document) {
+ StartLine = line.Row,
+ EndLine = line.EndRow,
+ StartColumn = line.Column,
+ EndColumn = line.EndColumn,
+ };
+ }
+
public void Dispose ()
{
symbol_file.Dispose ();
}
}
+
+ static class MethodEntryExtensions {
+
+ public static bool HasColumnInfo (this MethodEntry entry)
+ {
+ return (entry.MethodFlags & MethodEntry.Flags.ColumnsInfoIncluded) != 0;
+ }
+
+ public static bool HasEndInfo (this MethodEntry entry)
+ {
+ return (entry.MethodFlags & MethodEntry.Flags.EndInfoIncluded) != 0;
+ }
+ }
}
diff --git a/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs b/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs
index 4bc822b..fb6d4a8 100644
--- a/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs
+++ b/symbols/mdb/Mono.Cecil.Mdb/MdbWriter.cs
@@ -90,7 +90,7 @@ namespace Mono.Cecil.Mdb {
}
void Populate (Collection<Instruction> instructions, int [] offsets,
- int [] startRows, int [] startCols, out SourceFile file)
+ int [] startRows, int [] endRows, int [] startCols, int [] endCols, out SourceFile file)
{
SourceFile source_file = null;
@@ -103,7 +103,9 @@ namespace Mono.Cecil.Mdb {
source_file = GetSourceFile (sequence_point.Document);
startRows [i] = sequence_point.StartLine;
+ endRows [i] = sequence_point.EndLine;
startCols [i] = sequence_point.StartColumn;
+ endCols [i] = sequence_point.EndColumn;
}
file = source_file;
@@ -120,22 +122,25 @@ namespace Mono.Cecil.Mdb {
var offsets = new int [count];
var start_rows = new int [count];
+ var end_rows = new int [count];
var start_cols = new int [count];
+ var end_cols = new int [count];
SourceFile file;
- Populate (instructions, offsets, start_rows, start_cols, out file);
+ Populate (instructions, offsets, start_rows, end_rows, start_cols, end_cols, out file);
var builder = writer.OpenMethod (file.CompilationUnit, 0, method);
- for (int i = 0; i < count; i++)
+ for (int i = 0; i < count; i++) {
builder.MarkSequencePoint (
offsets [i],
file.CompilationUnit.SourceFile,
start_rows [i],
+ end_rows [i],
start_cols [i],
+ end_cols [i],
false);
-
-
+ }
if (body.Scope != null && body.Scope.HasScopes)
WriteScope (body.Scope, true);
@@ -204,6 +209,8 @@ namespace Mono.Cecil.Mdb {
GetSourceFile (sequence_point.Document).CompilationUnit.SourceFile,
sequence_point.StartLine,
sequence_point.EndLine,
+ sequence_point.StartColumn,
+ sequence_point.EndColumn,
false);
}
diff --git a/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs b/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs
index 3f43fc2..545ee31 100644
--- a/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs
+++ b/symbols/mdb/Test/Mono.Cecil.Tests/MdbTests.cs
@@ -9,7 +9,7 @@ namespace Mono.Cecil.Tests {
public class MdbTests : BaseTestFixture {
[Test]
- public void Main ()
+ public void MdbWithJustLineInfo ()
{
TestModule ("hello.exe", module => {
var type = module.GetType ("Program");
@@ -17,17 +17,17 @@ namespace Mono.Cecil.Tests {
AssertCode (@"
.locals init (System.Int32 i)
- .line 7,7:0,0 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
+ .line 7,-1:-1,-1 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
IL_0000: ldc.i4.0
IL_0001: stloc.0
- .line 7,7:0,0 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
+ .line 7,-1:-1,-1 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
IL_0002: br IL_0013
- .line 8,8:0,0 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
+ .line 8,-1:-1,-1 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
IL_0007: ldarg.0
IL_0008: ldloc.0
IL_0009: ldelem.ref
IL_000a: call System.Void Program::Print(System.String)
- .line 7,7:0,0 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
+ .line 7,-1:-1,-1 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
IL_000f: ldloc.0
IL_0010: ldc.i4.1
IL_0011: add
@@ -37,7 +37,7 @@ namespace Mono.Cecil.Tests {
IL_0015: ldlen
IL_0016: conv.i4
IL_0017: blt IL_0007
- .line 10,10:0,0 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
+ .line 10,-1:-1,-1 'C:\sources\cecil\symbols\Mono.Cecil.Mdb\Test\Resources\assemblies\hello.cs'
IL_001c: ldc.i4.0
IL_001d: ret
", main);