about summary refs log tree commit diff
path: root/pkg/lang/vm/mem/errors.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/mem/errors.go')
-rw-r--r--pkg/lang/vm/mem/errors.go27
1 files changed, 23 insertions, 4 deletions
diff --git a/pkg/lang/vm/mem/errors.go b/pkg/lang/vm/mem/errors.go
index e7a3f8f..f5dcc86 100644
--- a/pkg/lang/vm/mem/errors.go
+++ b/pkg/lang/vm/mem/errors.go
@@ -1,17 +1,36 @@
 package mem
 
-import "errors"
+import (
+	"errors"
+	"fmt"
+)
 
 var (
 	ErrMemOverflow = errors.New("memory overflow, cannot allocate more than 10000 memory cells")
-
-	ErrFatalNonFreeCell = errors.New("non-free cell marked as free")
 )
 
+type ErrInvalidCellKind struct {
+	Kind CellKind
+}
+
+func (e ErrInvalidCellKind) Error() string {
+	return fmt.Sprintf("cannot allocate cell of kind %s", e.Kind)
+}
+
 type ErrInvalidMemAccess struct {
 	Ptr Ptr
 }
 
 func (e ErrInvalidMemAccess) Error() string {
-	return "invalid memory access at " + e.Ptr.String()
+	return fmt.Sprintf("invalid memory access at %d", e.Ptr)
+}
+
+type ErrDifferingCellKind struct {
+	Ptr      Ptr
+	Expected CellKind
+	Got      CellKind
+}
+
+func (e ErrDifferingCellKind) Error() string {
+	return fmt.Sprintf("tried assigning %v to mem cell of type %v at %d", e.Got, e.Expected, e.Ptr)
 }