diff options
| author | Mel <einebeere@gmail.com> | 2022-05-20 21:04:37 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-05-20 21:04:37 +0200 |
| commit | 3f4efe745a0404953266476ec52db54b182de2f8 (patch) | |
| tree | 107542d587c97b99f749c537870e84d196058210 /pkg/lang/vm/vm.go | |
| parent | 25eb5ca1b0a8b9b35f36deedec4901bca02bf43e (diff) | |
| download | jinx-3f4efe745a0404953266476ec52db54b182de2f8.tar.zst jinx-3f4efe745a0404953266476ec52db54b182de2f8.zip | |
Call and return from functions
Diffstat (limited to 'pkg/lang/vm/vm.go')
| -rw-r--r-- | pkg/lang/vm/vm.go | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/pkg/lang/vm/vm.go b/pkg/lang/vm/vm.go index a428bfd..dfe1ae2 100644 --- a/pkg/lang/vm/vm.go +++ b/pkg/lang/vm/vm.go @@ -85,7 +85,10 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { case code.OpPushArray: vm.execPushArray() case code.OpPushFunction: - panic("not implemented") + x, advance := vm.code.GetUint(vm.pc) + vm.pc += advance + + vm.execPushFunction(int(x)) case code.OpPushObject: panic("not implemented") @@ -120,7 +123,7 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { case code.OpLte: err = vm.execLte() case code.OpCall: - panic("not implemented") + err = vm.execCall() case code.OpJmp: pc, _ := vm.code.GetUint(vm.pc) @@ -134,7 +137,7 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { vm.pc += advance err = vm.execJumpIf(int(pc), false) case code.OpRet: - panic("not implemented") + err = vm.execRet() case code.OpTempArrLen: err = vm.execTempArrLen() |
