diff options
| author | Mel <einebeere@gmail.com> | 2022-05-19 23:55:24 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-05-19 23:55:24 +0200 |
| commit | bfa32b8b880b42eda6007ba81f8fbbd340009322 (patch) | |
| tree | 7aa5dd13d59b545c412c6149c003deeb9bed954f | |
| parent | 88afd4941bdf8e3b180fafd1a555df41622a7331 (diff) | |
| download | jinx-bfa32b8b880b42eda6007ba81f8fbbd340009322.tar.zst jinx-bfa32b8b880b42eda6007ba81f8fbbd340009322.zip | |
Return pc after VM error
| -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 } |
