From 5127202722b2e9f07b4df9be2dc411baa5545290 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Tue, 31 Oct 2023 21:41:53 +0000 Subject: Introduced 3 new union members to data_t These new members are just signed versions of the previous members. This makes type punning and usage for signed versions easier than before (no need for memcpy). --- lib/base.h | 3 +++ vm/runtime.c | 12 +++--------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/base.h b/lib/base.h index 64d8f74..7acf13f 100644 --- a/lib/base.h +++ b/lib/base.h @@ -48,8 +48,11 @@ typedef i64 s_word; typedef union { byte as_byte; + s_byte as_char; hword as_hword; + s_hword as_int; word as_word; + s_word as_long; } data_t; typedef enum diff --git a/vm/runtime.c b/vm/runtime.c index a7d356d..a2e78b7 100644 --- a/vm/runtime.c +++ b/vm/runtime.c @@ -188,27 +188,21 @@ err_t vm_execute(vm_t *vm) switch (print_type) { case TYPE_CHAR: { - char c = 0; - memcpy(&c, &datum.as_byte, 1); - printf("%c", c); + printf("%c", datum.as_char); break; } case TYPE_BYTE: printf("0x%x", datum.as_byte); break; case TYPE_INT: { - s_hword i = 0; - memcpy(&i, &datum.as_hword, HWORD_SIZE); - printf("%" PRId32, i); + printf("%" PRId32, datum.as_int); break; } case TYPE_HWORD: printf("%" PRIu32, datum.as_hword); break; case TYPE_LONG: { - s_word i = 0; - memcpy(&i, &datum.as_word, WORD_SIZE); - printf("%" PRId64, i); + printf("%" PRId64, datum.as_long); break; } case TYPE_WORD: -- cgit v1.2.3-13-gbd6f