summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ast/ast.h1
-rw-r--r--src/codegen/codegen_stmt.c14
-rw-r--r--src/parser/parser_expr.c14
-rw-r--r--src/parser/parser_stmt.c14
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;