From 360f092fe693f66219891581417026a3cffd2709 Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 20 May 2022 00:05:20 +0200 Subject: More VM operations needed for Fib --- pkg/lang/vm/vm.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'pkg/lang/vm/vm.go') diff --git a/pkg/lang/vm/vm.go b/pkg/lang/vm/vm.go index 0de8fb9..8fdc0d5 100644 --- a/pkg/lang/vm/vm.go +++ b/pkg/lang/vm/vm.go @@ -89,6 +89,9 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { case code.OpPushObject: panic("not implemented") + case code.OpDrop: + _, err = vm.stack.Top().Pop() + case code.OpGetGlobal: panic("not implemented") case code.OpGetLocal: @@ -98,6 +101,8 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { err = vm.execGetLocal(int(offset)) case code.OpGetMember: panic("not implemented") + case code.OpGetMethod: + panic("not implemented") case code.OpGetArg: vm.execGetArg() case code.OpGetEnv: @@ -109,18 +114,30 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { err = vm.execSub() case code.OpIndex: err = vm.execIndex() + case code.OpLte: + err = vm.execLte() case code.OpCall: panic("not implemented") case code.OpJmp: pc, _ := vm.code.GetUint(vm.pc) vm.pc = int(pc) - case code.OpJez: - panic("not implemented") - + case code.OpJt: + pc, advance := vm.code.GetUint(vm.pc) + vm.pc += advance + err = vm.execJumpIf(int(pc), true) + case code.OpJf: + pc, advance := vm.code.GetUint(vm.pc) + vm.pc += advance + err = vm.execJumpIf(int(pc), false) case code.OpRet: panic("not implemented") + case code.OpTempArrLen: + err = vm.execTempArrLen() + case code.OpTempArrPush: + err = vm.execTempArrPush() + default: err = ErrInvalidOp{Op: uint8(op)} } -- cgit 1.4.1