diff options
| author | Mel <einebeere@gmail.com> | 2022-05-17 23:07:33 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-05-17 23:07:33 +0200 |
| commit | ec5ee8647bcbf6ab073711c6892710776925c54d (patch) | |
| tree | 1228a72291123e0f520616b9d21f1e013e49351d /pkg/lang/vm/stack.go | |
| parent | b09a14147d397904722ee7c25e4defc56135b96f (diff) | |
| download | jinx-ec5ee8647bcbf6ab073711c6892710776925c54d.tar.zst jinx-ec5ee8647bcbf6ab073711c6892710776925c54d.zip | |
Lang VM Prototype
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] +} |
