about summary refs log tree commit diff
path: root/pkg/lang/vm/stack/errors.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-05-28 14:28:46 +0000
committerGitHub <noreply@github.com>2022-05-28 14:28:46 +0000
commit2ddb215e3b0d3818b3fac8f315d97d8020eb699f (patch)
tree80ab831b31a550751847f543cf4741f8d3449f2f /pkg/lang/vm/stack/errors.go
parent0a7700112f82e634a957685bee0cbaa3458f4945 (diff)
downloadjinx-2ddb215e3b0d3818b3fac8f315d97d8020eb699f.tar.zst
jinx-2ddb215e3b0d3818b3fac8f315d97d8020eb699f.zip
Extract stack package and hide behind interface
Diffstat (limited to 'pkg/lang/vm/stack/errors.go')
-rw-r--r--pkg/lang/vm/stack/errors.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/pkg/lang/vm/stack/errors.go b/pkg/lang/vm/stack/errors.go
new file mode 100644
index 0000000..55ef2ea
--- /dev/null
+++ b/pkg/lang/vm/stack/errors.go
@@ -0,0 +1,34 @@
+package stack
+
+import (
+	"errors"
+	"fmt"
+)
+
+var (
+	ErrStackOverflow  = errors.New("stack overflow (max depth: 1000)")
+	ErrStackUnderflow = errors.New("local stack underflow")
+
+	ErrReachedMaxCallDepth  = errors.New("reached max call depth (max depth: 1000)")
+	ErrReachedRootCallFrame = errors.New("reached root call frame")
+
+	ErrCallBaseCantBeNegative = errors.New("call base cannot be negative")
+)
+
+type ErrLocalIndexOutOfBounds struct {
+	Index int
+	Len   int
+}
+
+func (e ErrLocalIndexOutOfBounds) Error() string {
+	return fmt.Sprintf("local index out of bounds: %d (len: %d)", e.Index, e.Len)
+}
+
+type ErrStackIndexOutOfBounds struct {
+	Index int
+	Len   int
+}
+
+func (e ErrStackIndexOutOfBounds) Error() string {
+	return fmt.Sprintf("stack index out of bounds: %d (len: %d)", e.Index, e.Len)
+}