diff options
Diffstat (limited to 'pkg/lang/vm/code/debug.go')
| -rw-r--r-- | pkg/lang/vm/code/debug.go | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/pkg/lang/vm/code/debug.go b/pkg/lang/vm/code/debug.go index ebf0ea1..efb788c 100644 --- a/pkg/lang/vm/code/debug.go +++ b/pkg/lang/vm/code/debug.go @@ -1,16 +1,19 @@ package code -import "jinx/pkg/libs/rangemap" +import ( + "jinx/pkg/libs/rangemap" + "jinx/pkg/libs/source" +) type DebugInfo struct { file string - pcToLine rangemap.RangeMap[int] + pcToLine rangemap.RangeMap[source.Loc] } func NewDebugInfo(file string) DebugInfo { return DebugInfo{ file: file, - pcToLine: rangemap.New[int](), + pcToLine: rangemap.New[source.Loc](), } } @@ -18,14 +21,22 @@ func (di *DebugInfo) File() string { return di.file } -func (di *DebugInfo) PCToLine(pc int) int { - line := di.pcToLine.Get(pc) - if line == nil { - return -1 +func (di *DebugInfo) PCToLoc(pc int) (source.Loc, bool) { + loc := di.pcToLine.Get(pc) + if loc == nil { + return source.Loc{}, false } - return *line + return *loc, true } func (di *DebugInfo) AppendLine(uptoPc, line int) { - di.pcToLine.AppendToLast(uptoPc, line) + di.pcToLine.AppendToLast(uptoPc, source.Loc{Row: line, Col: 0}) +} + +func (di *DebugInfo) FillInfo(from, to int, loc source.Loc) { + di.pcToLine.Fill(from, to, loc) +} + +func (di *DebugInfo) AppendOther(other DebugInfo) { + di.pcToLine.AppendRanges(other.pcToLine) } |
