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).
This commit is contained in:
2023-10-31 21:41:53 +00:00
parent 5202dfbb26
commit 5127202722
2 changed files with 6 additions and 9 deletions

View File

@@ -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

View File

@@ -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: