aboutsummaryrefslogtreecommitdiff
path: root/pkg/lang/vm
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm')
-rw-r--r--pkg/lang/vm/errors.go11
-rw-r--r--pkg/lang/vm/utils.go2
2 files changed, 8 insertions, 5 deletions
diff --git a/pkg/lang/vm/errors.go b/pkg/lang/vm/errors.go
index fb37726..bfc8a34 100644
--- a/pkg/lang/vm/errors.go
+++ b/pkg/lang/vm/errors.go
@@ -1,7 +1,6 @@
package vm
import (
- "errors"
"fmt"
"jinx/pkg/lang/vm/code"
"jinx/pkg/lang/vm/mem"
@@ -24,9 +23,13 @@ func (e Error) Error() string {
// Fatal errors
-var (
- ErrEnvNotSet = errors.New("env not set")
-)
+type ErrNullPtrDereference struct {
+ At mem.Ptr
+}
+
+func (e ErrNullPtrDereference) Error() string {
+ return fmt.Sprintf("null pointer dereference at %v", e.At)
+}
type ErrInvalidOp struct {
Op uint8
diff --git a/pkg/lang/vm/utils.go b/pkg/lang/vm/utils.go
index 46eccb1..00311ef 100644
--- a/pkg/lang/vm/utils.go
+++ b/pkg/lang/vm/utils.go
@@ -30,7 +30,7 @@ func (vm *VM) popCallAndDrop() (int, error) {
func (vm *VM) getMemCell(ptr mem.Ptr, kind mem.CellKind, allowNil bool) (mem.CellData, error) {
if ptr.IsNull() {
- return nil, ErrEnvNotSet // TODO: Rename
+ return nil, ErrNullPtrDereference{At: ptr}
}
if !vm.memory.Is(ptr, kind) {