From 47c4cd3705bee9d7154c42ce95aef6f8a19e0661 Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 27 May 2022 16:44:22 +0000 Subject: Add debug info to compiled VM code --- pkg/lang/vm/code/code.go | 12 +++++++++--- pkg/lang/vm/code/debug.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 pkg/lang/vm/code/debug.go (limited to 'pkg/lang/vm/code') diff --git a/pkg/lang/vm/code/code.go b/pkg/lang/vm/code/code.go index bd25fcd..38bbcf5 100644 --- a/pkg/lang/vm/code/code.go +++ b/pkg/lang/vm/code/code.go @@ -8,12 +8,14 @@ import ( ) type Code struct { - code []byte + code []byte + debugInfo DebugInfo } -func New(code []byte) Code { +func New(code []byte, info DebugInfo) Code { return Code{ - code: code, + code: code, + debugInfo: info, } } @@ -25,6 +27,10 @@ func (c *Code) Code() []byte { return c.code } +func (c *Code) Debug() *DebugInfo { + return &c.debugInfo +} + func (c *Code) GetOp(at int) (Op, int) { return Op(c.code[at]), 1 } diff --git a/pkg/lang/vm/code/debug.go b/pkg/lang/vm/code/debug.go new file mode 100644 index 0000000..b96c834 --- /dev/null +++ b/pkg/lang/vm/code/debug.go @@ -0,0 +1,31 @@ +package code + +import "jinx/pkg/libs/rangemap" + +type DebugInfo struct { + file string + pcToLine rangemap.RangeMap[int] +} + +func NewDebugInfo(file string) DebugInfo { + return DebugInfo{ + file: file, + pcToLine: rangemap.New[int](), + } +} + +func (di *DebugInfo) File() string { + return di.file +} + +func (di *DebugInfo) PCToLine(pc int) int { + line, ok := di.pcToLine.Get(pc) + if !ok { + return -1 + } + return *line +} + +func (di *DebugInfo) AppendLine(uptoPc, line int) { + di.pcToLine.AppendToLast(uptoPc, line) +} -- cgit 1.4.1 href='/network/diff/machines/corsac/hardware.nix?id=5ac307b7bc51f8f94b7a7c10ec978bc302e8b303'>diff
path: root/machines/corsac/hardware.nix
blob: c3038bee3b91a4e3cce42319e40afd337adb3645 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40