From b4d7305730606126d74862ca472a3efed964c2d8 Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Sat, 28 Mar 2026 17:05:37 -1000 Subject: rehashing and size tracking corrections --- parser.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'parser.c') diff --git a/parser.c b/parser.c index d7dc3fb..157ffb1 100644 --- a/parser.c +++ b/parser.c @@ -80,9 +80,23 @@ static void parse_type(struct type_node* p_node) { static void parse_expr(struct expr_node* p_node); -static void parse_int_lit(struct int_lit_node* p_node) { - expect(TK_INT_LIT); - p_node->val = tok.data.int_lit; +static void parse_literal(struct expr_node* p_node) { + peek_or_panic(); + + switch (tok.type) { + case TK_INT_LIT: + expect(TK_INT_LIT); + p_node->type = EXPR_INT_LIT; + p_node->as._int_lit.val = tok.data.int_lit; + break; + case TK_CHAR_LIT: + expect(TK_CHAR_LIT); + p_node->type = EXPR_CHAR_LIT; + p_node->as._char_lit.val = tok.data.char_lit; + break; + default: + PARSER_PANIC("invalid literal type"); + } } static void parse_var_ref(struct var_ref_node* p_node) { @@ -124,8 +138,10 @@ static void parse_expr(struct expr_node* p_node) { expect(TK_RPAREN); break; case TK_INT_LIT: - p_node->type = EXPR_INT_LIT; - parse_int_lit(&p_node->as._int_lit); + case TK_CHAR_LIT: + case TK_FLOAT_LIT: + case TK_STR_LIT: + parse_literal(p_node); break; case TK_IDENT: p_node->type = EXPR_VAR_REF; -- cgit v1.2.3