diff --git a/TestSuite/lambda_params.pas b/TestSuite/lambda_params.pas new file mode 100644 index 000000000..187d9a5b7 --- /dev/null +++ b/TestSuite/lambda_params.pas @@ -0,0 +1,13 @@ +procedure p1(params fs: array of Action0); +begin + fs[0]; +end; + +begin + var i := 0; + p1(()-> + begin + i := 1; + end); + assert(i = 1); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 9ad983282..2e8b76158 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -7203,7 +7203,10 @@ namespace PascalABCCompiler.TreeConverter else { var enLambda = (SyntaxTree.function_lambda_definition)en; - LambdaHelper.InferTypesFromVarStmt(fn.parameters[exprCounter].type, enLambda, this); + 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); enLambda.lambda_visit_mode = LambdaVisitMode.VisitForInitialMethodCallProcessing;