aboutsummaryrefslogtreecommitdiff
path: root/pkg/lang/vm
diff options
context:
space:
mode:
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
}