summaryrefslogtreecommitdiff
path: root/src/parser/parser_expr.c
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-22 23:21:15 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-22 23:21:22 +0000
commit40f3a2aa5c853d3b821debeafcf07b8cf4cf204f (patch)
tree2bc3a628301001055fcc545ee88a4f4bacef6f81 /src/parser/parser_expr.c
parentdf8c377cfe4397c522ea67fe97bdacc1c7115ee9 (diff)
Lambda fix
Diffstat (limited to 'src/parser/parser_expr.c')
-rw-r--r--src/parser/parser_expr.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/parser/parser_expr.c b/src/parser/parser_expr.c
index 7993423..4a4f906 100644
--- a/src/parser/parser_expr.c
+++ b/src/parser/parser_expr.c
@@ -4769,6 +4769,10 @@ ASTNode *parse_arrow_lambda_single(ParserContext *ctx, Lexer *l, char *param_nam
t->arg_count = 1;
lambda->type_info = t;
+ // Register parameter in scope for body parsing
+ enter_scope(ctx);
+ add_symbol(ctx, param_name, "int", type_new(TYPE_INT));
+
// Body parsing...
ASTNode *body_block = NULL;
if (lexer_peek(l).type == TOK_LBRACE)
@@ -4789,6 +4793,7 @@ ASTNode *parse_arrow_lambda_single(ParserContext *ctx, Lexer *l, char *param_nam
lambda->lambda.is_expression = 1;
register_lambda(ctx, lambda);
analyze_lambda_captures(ctx, lambda);
+ exit_scope(ctx);
return lambda;
}
@@ -4812,6 +4817,13 @@ ASTNode *parse_arrow_lambda_multi(ParserContext *ctx, Lexer *l, char **param_nam
}
lambda->type_info = t;
+ // Register parameters in scope for body parsing
+ enter_scope(ctx);
+ for (int i = 0; i < num_params; i++)
+ {
+ add_symbol(ctx, param_names[i], "int", type_new(TYPE_INT));
+ }
+
// Body parsing...
ASTNode *body_block = NULL;
if (lexer_peek(l).type == TOK_LBRACE)
@@ -4832,5 +4844,6 @@ ASTNode *parse_arrow_lambda_multi(ParserContext *ctx, Lexer *l, char **param_nam
lambda->lambda.is_expression = 1;
register_lambda(ctx, lambda);
analyze_lambda_captures(ctx, lambda);
+ exit_scope(ctx);
return lambda;
}