From 6fe6e6546c4801f850d943c699fccdd5dc6ea723 Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 20 May 2022 20:28:17 +0200 Subject: Continuous VM stack implementation --- pkg/lang/vm/vm.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'pkg/lang/vm/vm.go') diff --git a/pkg/lang/vm/vm.go b/pkg/lang/vm/vm.go index 8fdc0d5..a428bfd 100644 --- a/pkg/lang/vm/vm.go +++ b/pkg/lang/vm/vm.go @@ -8,19 +8,19 @@ import ( type VM struct { code *code.Code pc int - stack CallStack + stack Stack } func New(code *code.Code) *VM { return &VM{ code: code, pc: 0, - stack: NewCallStack(), + stack: NewStack(), } } func (vm *VM) GetResult() (string, error) { - res, err := vm.stack.Top().Pop() + res, err := vm.stack.Pop() if err != nil { return "", err } @@ -89,8 +89,13 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { case code.OpPushObject: panic("not implemented") + case code.OpShift: + by, advance := vm.code.GetInt(vm.pc) + vm.pc += advance + + err = vm.stack.ShiftTopCallBase(int(by)) case code.OpDrop: - _, err = vm.stack.Top().Pop() + _, err = vm.stack.Pop() case code.OpGetGlobal: panic("not implemented") @@ -103,8 +108,6 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { panic("not implemented") case code.OpGetMethod: panic("not implemented") - case code.OpGetArg: - vm.execGetArg() case code.OpGetEnv: panic("not implemented") -- cgit 1.4.1