From 0a9605b6b13f2e066a69662f5802b397f8b89424 Mon Sep 17 00:00:00 2001 From: hachem Date: Sat, 19 Sep 2026 16:15:50 +0200 Subject: feat: char and integral_constant types --- eval.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 2f79a5d..170b122 100644 --- a/eval.c +++ b/eval.c @@ -130,6 +130,13 @@ static int evaluate_type(struct Machine* machine, const struct Node* node, struc case TYPE_INT32: out->kind = KIND_INT32; return 0; case TYPE_BYTE: out->kind = KIND_BYTE; return 0; case TYPE_SIZE: out->kind = KIND_SIZE; return 0; + case TYPE_CHAR: out->kind = KIND_CHAR; return 0; + case TYPE_CHAR_CONSTANT: + if (evaluate_value(machine, node->first, &out->number)) + return 1; + + out->kind = KIND_CHAR_CONSTANT; + return 0; case TYPE_REMOVE_CV: return evaluate_type(machine, node->first, out); case TYPE_ARRAY: if (evaluate_type(machine, node->first, &element) || @@ -248,6 +255,8 @@ static enum RunStatus emit(struct Machine* machine, const struct Node* node) case KIND_BYTE: (void)printf("byte\n"); break; case KIND_SIZE: (void)printf("size_t\n"); break; case KIND_ARRAY: (void)printf("array[%" PRId64 "]\n", type.number); break; + case KIND_CHAR: (void)printf("char\n"); break; + case KIND_CHAR_CONSTANT: (void)printf("%c\n", (char)type.number); break; case KIND_VALUE: (void)printf("%" PRId64 "\n", type.number); break; } -- cgit v1.3