From ec5ee8647bcbf6ab073711c6892710776925c54d Mon Sep 17 00:00:00 2001 From: Mel Date: Tue, 17 May 2022 23:07:33 +0200 Subject: Lang VM Prototype --- pkg/lang/vm/stack.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 pkg/lang/vm/stack.go (limited to 'pkg/lang/vm/stack.go') 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] +} -- cgit 1.4.1