From d52d7ad413ffaf5d48fe57c082d823f6052cbc4a Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Sun, 15 Oct 2023 04:36:47 +0100 Subject: Implemented a union type to make vm_push_* routines uniform Function dispatch --- src/main.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 30abda7..130dbfd 100644 --- a/src/main.c +++ b/src/main.c @@ -35,20 +35,26 @@ typedef struct } stack; } vm_t; -void vm_push_byte(vm_t *vm, byte b) +typedef union +{ + byte as_byte; + word as_word; +} data_t; + +void vm_push_byte(vm_t *vm, data_t b) { if (vm->stack.pointer >= VM_STACK_MAX) return; - vm->stack.data[vm->stack.pointer++] = b; + vm->stack.data[vm->stack.pointer++] = b.as_byte; } -void vm_push_word(vm_t *vm, word w) +void vm_push_word(vm_t *vm, data_t w) { // NOTE: Relies on sizeof measuring in bytes if (vm->stack.pointer + sizeof(w) >= VM_STACK_MAX) return; - memcpy(vm->stack.data + vm->stack.pointer, &w, sizeof(w)); - vm->stack.pointer += sizeof(w); + memcpy(vm->stack.data + vm->stack.pointer, &w.as_word, sizeof(w.as_word)); + vm->stack.pointer += sizeof(w.as_word); } int main(void) -- cgit v1.2.3-13-gbd6f