diff options
Diffstat (limited to 'pkg/lang/vm/stack.go')
| -rw-r--r-- | pkg/lang/vm/stack.go | 37 |
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] +} |
