summaryrefslogtreecommitdiff
path: root/parser.c
diff options
context:
space:
mode:
authorCarson Fleming <cflems@cflems.net>2026-07-29 23:58:55 -0400
committerCarson Fleming <cflems@cflems.net>2026-07-29 23:58:55 -0400
commit3445947c072a4cd533f5f3a53178f77361859123 (patch)
tree9ba7d330b1091fdad76bbb190579491e022dc3d3 /parser.c
parent29510d33cab6e86b28b12c6246bca58acdab26e2 (diff)
downloadccc-3445947c072a4cd533f5f3a53178f77361859123.tar.gz
improve type system
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/parser.c b/parser.c
index 40d5bbd..b92ff8b 100644
--- a/parser.c
+++ b/parser.c
@@ -121,13 +121,32 @@ static void parse_literal(struct expr_node* p_node) {
case TK_INT_LIT:
expect(TK_INT_LIT);
p_node->type = EXPR_INT_LIT;
- p_node->inner.int_lit.val = tok.data.int_lit;
+ p_node->inner.int_lit = (struct int_lit_node) {
+ .val = tok.data.int_lit,
+ };
break;
case TK_CHAR_LIT:
expect(TK_CHAR_LIT);
p_node->type = EXPR_CHAR_LIT;
+ p_node->inner.char_lit = (struct char_lit_node) {
+ .val = tok.data.char_lit,
+ };
p_node->inner.char_lit.val = tok.data.char_lit;
break;
+ case TK_FLOAT_LIT:
+ expect(TK_FLOAT_LIT);
+ p_node->type = EXPR_FLOAT_LIT;
+ p_node->inner.float_lit = (struct float_lit_node) {
+ .val = tok.data.float_lit,
+ };
+ break;
+ case TK_STR_LIT:
+ expect(TK_STR_LIT);
+ p_node->type = EXPR_STR_LIT;
+ p_node->inner.str_lit = (struct str_lit_node) {
+ .val = tok.data.str_lit,
+ };
+ break;
default:
PARSER_PANIC("invalid literal type");
}