diff options
| -rw-r--r-- | pkg/lang/vm/errors.go | 9 | ||||
| -rw-r--r-- | pkg/lang/vm/vm.go | 5 |
2 files changed, 13 insertions, 1 deletions
diff --git a/pkg/lang/vm/errors.go b/pkg/lang/vm/errors.go index d19604a..9859feb 100644 --- a/pkg/lang/vm/errors.go +++ b/pkg/lang/vm/errors.go @@ -8,6 +8,15 @@ import ( "jinx/pkg/lang/vm/value" ) +type Error struct { + Pc int + Err error +} + +func (e Error) Error() string { + return fmt.Sprintf("vm error at pc %d: %s", e.Pc, e.Err) +} + // Fatal errors var ( diff --git a/pkg/lang/vm/vm.go b/pkg/lang/vm/vm.go index c538841..0de8fb9 100644 --- a/pkg/lang/vm/vm.go +++ b/pkg/lang/vm/vm.go @@ -34,7 +34,10 @@ func (vm *VM) Run() error { vm.pc += advance if decision, err := vm.step(op); err != nil { - return err + return Error{ + Pc: vm.pc, + Err: err, + } } else if decision == stepDecisionHalt { return nil } |
