From d2cdb211b2d15c3a15b15737645f2a68641f34ee Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Sat, 21 Oct 2023 23:31:48 +0100 Subject: Added vm_execute_all which executes an entire program Handles OP_HALT --- src/runtime.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/runtime.c') diff --git a/src/runtime.c b/src/runtime.c index 218bba7..57101e0 100644 --- a/src/runtime.c +++ b/src/runtime.c @@ -50,6 +50,10 @@ void vm_execute(vm_t *vm) vm->registers.ret = d.as_word; // will do type punning for me prog->ptr++; } + else if (instruction.opcode == OP_HALT) + { + // Do nothing here. Should be caught by callers of vm_execute + } else { // TODO: Error (Unknown opcode) @@ -57,6 +61,13 @@ void vm_execute(vm_t *vm) } } +void vm_execute_all(vm_t *vm) +{ + struct Program *program = &vm->program; + while (program->instructions[program->ptr].opcode != OP_HALT) + vm_execute(vm); +} + void vm_load_stack(vm_t *vm, byte *bytes, size_t size) { vm->stack.data = bytes; -- cgit v1.2.3-13-gbd6f