summaryrefslogtreecommitdiff
path: root/uscript/vm.c
diff options
context:
space:
mode:
authoriamcheeseman <[email protected]>2026-04-14 21:15:38 -0400
committeriamcheeseman <[email protected]>2026-04-14 21:15:38 -0400
commit7752d0b775c4df0de6fec688107e904ad20e1de6 (patch)
tree4255de168db8a527b7e99217021dd052bd2024e2 /uscript/vm.c
parenta2ebe62cdbbe12e75e3b5c79de3dce9fbeb1ca20 (diff)
microengine: compound operators
Diffstat (limited to 'uscript/vm.c')
-rw-r--r--uscript/vm.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/uscript/vm.c b/uscript/vm.c
index 4064e12..9fbd8c0 100644
--- a/uscript/vm.c
+++ b/uscript/vm.c
@@ -245,20 +245,26 @@ void us_exec(struct us_func *func)
vm_push(vm.cf->stackbot[read_byte()]);
break;
case BC_SET_LOCAL:
- vm.cf->stackbot[read_byte()] = vm_peek();
+ vm.cf->stackbot[read_byte()] = vm_peek(0);
break;
case BC_GET_GLOBAL:
vm_push(get_global(read_short()));
break;
case BC_SET_GLOBAL:
- set_global(read_short(), vm_peek());
+ set_global(read_short(), vm_peek(0));
break;
case BC_GET_UPVAL:
vm_push(*func->upvals[read_byte()]->loc);
break;
case BC_SET_UPVAL:
- *func->upvals[read_byte()]->loc = vm_peek();
+ *func->upvals[read_byte()]->loc = vm_peek(0);
break;
+ case BC_PUSH_INDEX: {
+ struct us_val idx_val = vm_peek(0);
+ struct us_val idxee_val = vm_peek(1);
+ index_val(idx_val, idxee_val);
+ break;
+ }
case BC_GET_INDEX: {
struct us_val idx_val = vm_pop();
struct us_val idxee_val = vm_pop();
@@ -403,7 +409,7 @@ void us_exec(struct us_func *func)
}
case BC_FALSEY_JMP: {
u16 jmp = read_short();
- if (as_bool(vm_peek()))
+ if (as_bool(vm_peek(0)))
break;
i += jmp;
break;