about summary refs log tree commit diff
path: root/pkg/lang/vm
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 /pkg/lang/vm
parent88afd4941bdf8e3b180fafd1a555df41622a7331 (diff)
downloadjinx-bfa32b8b880b42eda6007ba81f8fbbd340009322.tar.zst
jinx-bfa32b8b880b42eda6007ba81f8fbbd340009322.zip
Return pc after VM error
Diffstat (limited to 'pkg/lang/vm')
-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
 		}