public void GetLineSegment(out SourceFileSegment segment, IntPtr pc) { if (scriptLanguage == null || scriptLanguage.SourceFileSegments == null) { segment = new SourceFileSegment(0, IntPtr.Zero, null, new FunctionRef()); } else { scriptLanguage.SourceFileSegments.TryGetValue(pc, out segment); } }
public static void AppendDissassembly(StringBuilder sb, out int hiStart, out int hiEnd, AssemblySection section, SourceFileSegment segment, SourceModule module, ref int lineCount) { sb.AppendLine(); sb.AppendLine(section.FunctionName); sb.AppendLine(); hiStart = 0; hiEnd = 0; foreach (var s in section.Segments) { if (section.FunctionName == segment.Function.Name && lineCount == segment.LineNumber) { hiStart = sb.Length; hiEnd = hiStart + s.Length; } sb.AppendLine(s); if (section.FunctionName == segment.Function.Name) { lineCount++; } } }
public static void AppendDissassembly(StringBuilder sb, out int hiStart, out int hiEnd, SourceModule module, SourceFileSegment segment) { hiStart = 0; hiEnd = 0; int lineCount = 0; if (module == null) { return; } sb.Append("Disassembly of "); sb.AppendLine(module.Name); sb.AppendLine(); foreach (var section in module.Sections) { int sectionHiStart, sectionHiEnd; AppendDissassembly(sb, out sectionHiStart, out sectionHiEnd, section, segment, module, ref lineCount); if (sectionHiEnd > sectionHiStart) { hiStart = sectionHiStart; hiEnd = sectionHiEnd; } } }