From 076673f1c1b76c765f3661e02348a796799f1f81 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 4 Dec 2022 11:48:37 +0100 Subject: [PATCH] #2756 --- TestSuite/lambdas17.pas | 15 +++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 9 +++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 TestSuite/lambdas17.pas diff --git a/TestSuite/lambdas17.pas b/TestSuite/lambdas17.pas new file mode 100644 index 000000000..cff755bc6 --- /dev/null +++ b/TestSuite/lambdas17.pas @@ -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. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 8a5db6245..8bc0d4501 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -7368,12 +7368,17 @@ namespace PascalABCCompiler.TreeConverter else { 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); else LambdaHelper.InferTypesFromVarStmt(fn.parameters[exprCounter].type, enLambda, this); 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; exprCounter++; }