about summary refs log tree commit diff
path: root/pkg/lang/vm/stack.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-05-17 23:07:33 +0200
committerMel <einebeere@gmail.com>2022-05-17 23:07:33 +0200
commitec5ee8647bcbf6ab073711c6892710776925c54d (patch)
tree1228a72291123e0f520616b9d21f1e013e49351d /pkg/lang/vm/stack.go
parentb09a14147d397904722ee7c25e4defc56135b96f (diff)
downloadjinx-ec5ee8647bcbf6ab073711c6892710776925c54d.tar.zst
jinx-ec5ee8647bcbf6ab073711c6892710776925c54d.zip
Lang VM Prototype
Diffstat (limited to 'pkg/lang/vm/stack.go')
-rw-r--r--pkg/lang/vm/stack.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/pkg/lang/vm/stack.go b/pkg/lang/vm/stack.go
new file mode 100644
index 0000000..433c0b7
--- /dev/null
+++ b/pkg/lang/vm/stack.go
@@ -0,0 +1,37 @@
+package vm
+
+import "jinx/pkg/lang/vm/value"
+
+type CallStack []*LocalStack
+
+func (cs *CallStack) Push() {
+	*cs = append(*cs, &LocalStack{})
+}
+
+func (cs *CallStack) Pop() {
+	*cs = (*cs)[:len(*cs)-1]
+}
+
+func (cs *CallStack) Top() *LocalStack {
+	return (*cs)[len(*cs)-1]
+}
+
+func (cs *CallStack) Prev() *LocalStack {
+	return (*cs)[len(*cs)-2]
+}
+
+type LocalStack []value.Value
+
+func (ls *LocalStack) Push(v value.Value) {
+	*ls = append(*ls, v)
+}
+
+func (ls *LocalStack) Pop() value.Value {
+	v := (*ls)[len(*ls)-1]
+	*ls = (*ls)[:len(*ls)-1]
+	return v
+}
+
+func (ls *LocalStack) At(at int) value.Value {
+	return (*ls)[at]
+}