This commit is contained in:
Ivan Bondarev 2022-12-04 11:48:37 +01:00
parent b99d080b41
commit 076673f1c1
2 changed files with 22 additions and 2 deletions

15
TestSuite/lambdas17.pas Normal file
View file

@ -0,0 +1,15 @@
var i: integer;
procedure p1(params ps: array of ()->());
begin
ps[0];
ps[1];
end;
begin
p1(
()->begin Inc(i); end,
()->begin Inc(i); end
);
assert(i = 2);
end.

View file

@ -7368,12 +7368,17 @@ namespace PascalABCCompiler.TreeConverter
else else
{ {
var enLambda = (SyntaxTree.function_lambda_definition)en; var enLambda = (SyntaxTree.function_lambda_definition)en;
if (fn.parameters[exprCounter].is_params) if (fn.parameters.Count <= exprCounter && fn.parameters[fn.parameters.Count - 1].is_params)
LambdaHelper.InferTypesFromVarStmt(fn.parameters[fn.parameters.Count - 1].type.element_type, enLambda, this);
else if (fn.parameters[exprCounter].is_params)
LambdaHelper.InferTypesFromVarStmt(fn.parameters[exprCounter].type.element_type, enLambda, this); LambdaHelper.InferTypesFromVarStmt(fn.parameters[exprCounter].type.element_type, enLambda, this);
else else
LambdaHelper.InferTypesFromVarStmt(fn.parameters[exprCounter].type, enLambda, this); LambdaHelper.InferTypesFromVarStmt(fn.parameters[exprCounter].type, enLambda, this);
enLambda.lambda_visit_mode = LambdaVisitMode.VisitForAdvancedMethodCallProcessing; enLambda.lambda_visit_mode = LambdaVisitMode.VisitForAdvancedMethodCallProcessing;
exprs[exprCounter] = convert_strong(en); if (exprs.Count > exprCounter)
exprs[exprCounter] = convert_strong(en);
else
exprs.AddElement(convert_strong(en));
enLambda.lambda_visit_mode = LambdaVisitMode.VisitForInitialMethodCallProcessing; enLambda.lambda_visit_mode = LambdaVisitMode.VisitForInitialMethodCallProcessing;
exprCounter++; exprCounter++;
} }