about summary refs log tree commit diff
diff options
context:
space:
mode:
-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) {