about summary refs log tree commit diff
path: root/pkg/lang/vm/vm.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-05-20 21:04:37 +0200
committerMel <einebeere@gmail.com>2022-05-20 21:04:37 +0200
commit3f4efe745a0404953266476ec52db54b182de2f8 (patch)
tree107542d587c97b99f749c537870e84d196058210 /pkg/lang/vm/vm.go
parent25eb5ca1b0a8b9b35f36deedec4901bca02bf43e (diff)
downloadjinx-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.go9
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()