aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-05-19 23:55:24 +0200
committerMel <einebeere@gmail.com>2022-05-19 23:55:24 +0200
commitbfa32b8b880b42eda6007ba81f8fbbd340009322 (patch)
tree7aa5dd13d59b545c412c6149c003deeb9bed954f
parent88afd4941bdf8e3b180fafd1a555df41622a7331 (diff)
downloadjinx-bfa32b8b880b42eda6007ba81f8fbbd340009322.tar.zst
jinx-bfa32b8b880b42eda6007ba81f8fbbd340009322.zip
Return pc after VM error
-rw-r--r--pkg/lang/vm/errors.go9
-rw-r--r--pkg/lang/vm/vm.go5
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
}