diff options
| author | Mel <einebeere@gmail.com> | 2022-08-22 23:41:49 +0000 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-08-22 23:41:49 +0000 |
| commit | e22df631c4428f8dea4d5784a8a7840d2f84c6be (patch) | |
| tree | 084c233741374cdabde8d70b49988b3dca686719 /pkg/lang/vm/code/debug.go | |
| parent | 24183cd5363b96d83292df17d44fa79d8b47a89f (diff) | |
| download | jinx-e22df631c4428f8dea4d5784a8a7840d2f84c6be.tar.zst jinx-e22df631c4428f8dea4d5784a8a7840d2f84c6be.zip | |
Generate runtime debug info with source locations
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) } |
