From bfa32b8b880b42eda6007ba81f8fbbd340009322 Mon Sep 17 00:00:00 2001 From: Mel Date: Thu, 19 May 2022 23:55:24 +0200 Subject: Return pc after VM error --- pkg/lang/vm/errors.go | 9 +++++++++ pkg/lang/vm/vm.go | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'pkg/lang/vm') 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 } -- cgit 1.4.1