diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-25 11:08:43 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-25 11:08:50 +0000 |
| commit | b9a613749085e31a30894715333139b470549621 (patch) | |
| tree | fb849710857f4d6327992a3c77c6a1ee76342416 | |
| parent | f3c7b698fff7876cce26683beeee2e5e4e443962 (diff) | |
Refactoring, no need for 'is_ref' now.
| -rw-r--r-- | src/ast/ast.h | 1 | ||||
| -rw-r--r-- | src/codegen/codegen_stmt.c | 14 | ||||
| -rw-r--r-- | src/parser/parser_expr.c | 14 | ||||
| -rw-r--r-- | src/parser/parser_stmt.c | 14 |
4 files changed, 12 insertions, 31 deletions
diff --git a/src/ast/ast.h b/src/ast/ast.h index 21dbdbf..1614f3c 100644 --- a/src/ast/ast.h +++ b/src/ast/ast.h @@ -319,7 +319,6 @@ struct ASTNode int binding_count; // Count int *binding_refs; // Ref flags per binding int is_destructuring; - int is_ref; // Legacy single ref, I will remove it next. ASTNode *guard; ASTNode *body; int is_default; diff --git a/src/codegen/codegen_stmt.c b/src/codegen/codegen_stmt.c index 55a4be2..1cbd3a2 100644 --- a/src/codegen/codegen_stmt.c +++ b/src/codegen/codegen_stmt.c @@ -177,9 +177,19 @@ void codegen_match_internal(ParserContext *ctx, ASTNode *node, FILE *out, int us ASTNode *ref_check = node->match_stmt.cases; while (ref_check) { - if (ref_check->match_case.is_ref) + if (ref_check->match_case.binding_refs) + { + for (int i = 0; i < ref_check->match_case.binding_count; i++) + { + if (ref_check->match_case.binding_refs[i]) + { + has_ref_binding = 1; + break; + } + } + } + if (has_ref_binding) { - has_ref_binding = 1; break; } ref_check = ref_check->next; diff --git a/src/parser/parser_expr.c b/src/parser/parser_expr.c index fc3abb7..455baa3 100644 --- a/src/parser/parser_expr.c +++ b/src/parser/parser_expr.c @@ -1429,26 +1429,12 @@ ASTNode *parse_primary(ParserContext *ctx, Lexer *l) exit_scope(ctx); - int any_ref = 0; - if (binding_refs) - { - for (int i = 0; i < binding_count; i++) - { - if (binding_refs[i]) - { - any_ref = 1; - break; - } - } - } - ASTNode *c = ast_create(NODE_MATCH_CASE); c->match_case.pattern = pattern; c->match_case.binding_names = bindings; // New multi-binding field c->match_case.binding_count = binding_count; // New binding count field c->match_case.binding_refs = binding_refs; c->match_case.is_destructuring = is_destructure; - c->match_case.is_ref = any_ref; c->match_case.guard = guard; c->match_case.body = body; c->match_case.is_default = is_default; diff --git a/src/parser/parser_stmt.c b/src/parser/parser_stmt.c index 3bead26..f7c1d32 100644 --- a/src/parser/parser_stmt.c +++ b/src/parser/parser_stmt.c @@ -351,26 +351,12 @@ ASTNode *parse_match(ParserContext *ctx, Lexer *l) exit_scope(ctx); - int any_ref = 0; - if (binding_refs) - { - for (int i = 0; i < binding_count; i++) - { - if (binding_refs[i]) - { - any_ref = 1; - break; - } - } - } - ASTNode *c = ast_create(NODE_MATCH_CASE); c->match_case.pattern = pattern; c->match_case.binding_names = bindings; c->match_case.binding_count = binding_count; c->match_case.binding_refs = binding_refs; c->match_case.is_destructuring = is_destructure; - c->match_case.is_ref = any_ref; c->match_case.guard = guard; c->match_case.body = body; c->match_case.is_default = is_default; |
