protected override LineNumberTableData ReadLineNumbers()
{
ArrayList lines = new ArrayList ();
int last_line = -1;
JitLineNumberEntry[] line_numbers = address.LineNumbers.ToArray ();
string[] cil_code = wrapper.MethodSource.SourceBuffer.Contents;
int[] cil_offsets = new int [cil_code.Length];
int last_cil_offset = 0;
for (int i = 0; i < cil_code.Length; i++) {
if (!cil_code [i].StartsWith ("IL_")) {
cil_offsets [i] = last_cil_offset;
continue;
}
string offset = cil_code [i].Substring (3, 4);
last_cil_offset = Int32.Parse (offset, NumberStyles.HexNumber);
cil_offsets [i] = last_cil_offset;
}
lines.Add (new LineEntry (wrapper.StartAddress, 0, 1));
for (int i = 0; i < line_numbers.Length; i++) {
JitLineNumberEntry lne = line_numbers [i];
generate_line_number (lines, wrapper.StartAddress + lne.Address,
lne.Offset, cil_offsets, ref last_line);
}
lines.Sort ();
LineEntry[] addresses = new LineEntry [lines.Count];
lines.CopyTo (addresses, 0);
return new LineNumberTableData (1, cil_code.Length, addresses);
}