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++; }