about summary refs log tree commit diff
path: root/pkg/lang/vm/vm.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-08-22 23:41:49 +0000
committerMel <einebeere@gmail.com>2022-08-22 23:41:49 +0000
commite22df631c4428f8dea4d5784a8a7840d2f84c6be (patch)
tree084c233741374cdabde8d70b49988b3dca686719 /pkg/lang/vm/vm.go
parent24183cd5363b96d83292df17d44fa79d8b47a89f (diff)
downloadjinx-e22df631c4428f8dea4d5784a8a7840d2f84c6be.tar.zst
jinx-e22df631c4428f8dea4d5784a8a7840d2f84c6be.zip
Generate runtime debug info with source locations
Diffstat (limited to 'pkg/lang/vm/vm.go')
-rw-r--r--pkg/lang/vm/vm.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/pkg/lang/vm/vm.go b/pkg/lang/vm/vm.go
index 4d4d5ca..b18e7cb 100644
--- a/pkg/lang/vm/vm.go
+++ b/pkg/lang/vm/vm.go
@@ -121,10 +121,16 @@ func (vm *VM) executeModule(moduleID int) error {
 		vm.advancePC(advance)
 
 		if decision, err := vm.step(code, op); err != nil {
+			loc, ok := code.Debug().PCToLoc(vm.pc())
+			line := loc.Row
+			if !ok {
+				line = -1
+			}
+
 			return Error{
 				Pos:    vm.pos,
 				Module: module.Name(),
-				Line:   code.Debug().PCToLine(vm.pc()),
+				Line:   line,
 				Err:    err,
 			}
 		} else if decision == stepDecisionHalt {