summaryrefslogtreecommitdiff
path: root/parser.c
diff options
context:
space:
mode:
authorCarson Fleming <cflems@cflems.net>2026-08-05 01:05:22 -0400
committerCarson Fleming <cflems@cflems.net>2026-08-05 01:05:22 -0400
commita207a7f39514f03ddfafbe39e52a3fae57a414b4 (patch)
tree5f60d98707bf12255f294b3545d8e4f8e6005bca /parser.c
parentc462e3dd752f95adc46c0f2cf97c45c49d9744b4 (diff)
downloadccc-a207a7f39514f03ddfafbe39e52a3fae57a414b4.tar.gz
got hello world working with some hacks
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/parser.c b/parser.c
index bdf266d..c4fa8b7 100644
--- a/parser.c
+++ b/parser.c
@@ -576,14 +576,14 @@ static void parse_fn_decl(struct fn_decl_node* p_node) {
expect(TK_IDENT);
- if (scope_define_var(scope, (struct var_def) {
- .name = tok.data.ident,
- .loc = {
- .type = STO_FN,
- .decl = p_node,
- },
- }) == NULL)
- PARSER_PANIC("redefinition of '%s'", tok.data.ident)
+ /* redefinition is allowed */
+ scope_define_var(scope, (struct var_def) {
+ .name = tok.data.ident,
+ .loc = {
+ .type = STO_FN,
+ .decl = p_node,
+ },
+ });
p_node->name = tok.data.ident;
@@ -600,7 +600,12 @@ static void parse_fn_decl(struct fn_decl_node* p_node) {
expect(TK_RPAREN);
- parse_group(&p_node->body);
+ peek_or_panic();
+ if (tok.type == TK_SEMI) expect(TK_SEMI);
+ else {
+ p_node->body = ccc_alloc(sizeof(struct group_node));
+ parse_group(p_node->body);
+ }
scope_pop(&scope);
}