aboutsummaryrefslogtreecommitdiff
path: root/src/runtime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime.c')
-rw-r--r--src/runtime.c11
1 files changed, 11 insertions, 0 deletions
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;