diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-16 12:43:51 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-16 12:43:51 +0000 |
| commit | e77725b55190b8ec6dcab46aa137c32652ea004b (patch) | |
| tree | a80e237f1f65873f908f5819488c1c32683aff74 /src/parser/parser_stmt.c | |
| parent | 2e1aa3d8853f3b49e93b1d50b1b6e60e8238d79c (diff) | |
Support for 'alias' + test. Improved formatting and '.gitignore'.
Diffstat (limited to 'src/parser/parser_stmt.c')
| -rw-r--r-- | src/parser/parser_stmt.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/parser/parser_stmt.c b/src/parser/parser_stmt.c index 6f019b7..f391f97 100644 --- a/src/parser/parser_stmt.c +++ b/src/parser/parser_stmt.c @@ -1358,16 +1358,31 @@ ASTNode *parse_const(ParserContext *ctx, Lexer *l) ASTNode *parse_type_alias(ParserContext *ctx, Lexer *l) { - lexer_next(l); + lexer_next(l); // consume 'type' or 'alias' Token n = lexer_next(l); - lexer_next(l); + if (n.type != TOK_IDENT) + { + zpanic_at(n, "Expected identifier for type alias"); + } + + lexer_next(l); // consume '=' + char *o = parse_type(ctx, l); - lexer_next(l); + // printf("DEBUG: parse_type returned '%s'\n", o); + + lexer_next(l); // consume ';' (parse_type doesn't consume it? parse_type calls parse_type_formal + // which doesn't consume ;?) + // Note: parse_type_stmt usually expects ; but parse_type just parses type expression. + // Check previous implementation: it had lexer_next(l) at end. This assumes ;. + ASTNode *node = ast_create(NODE_TYPE_ALIAS); node->type_alias.alias = xmalloc(n.len + 1); strncpy(node->type_alias.alias, n.start, n.len); node->type_alias.alias[n.len] = 0; node->type_alias.original_type = o; + + register_type_alias(ctx, node->type_alias.alias, o); + return node; } @@ -3260,6 +3275,7 @@ ASTNode *parse_struct(ParserContext *ctx, Lexer *l, int is_union) { skip_comments(l); Token t = lexer_peek(l); + // printf("DEBUG: parse_struct loop seeing '%.*s'\n", t.len, t.start); if (t.type == TOK_RBRACE) { lexer_next(l); |
