diff --git a/TestSuite/lambdas10.pas b/TestSuite/lambdas10.pas new file mode 100644 index 000000000..3223f3dee --- /dev/null +++ b/TestSuite/lambdas10.pas @@ -0,0 +1,13 @@ +procedure p0(o: T; p: byte->()) := p(2); + +procedure p1() := exit; + +var i: integer; +begin + var p2: ()->() := ()->Inc(i); + + p0(0, b-> p1() ); + p0(0, b-> p2.Invoke() ); + p0(0, b-> p2() ); + 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 6d37d9592..3b4daf4a0 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -19980,7 +19980,7 @@ namespace PascalABCCompiler.TreeConverter try { qq = convert_strong(ff.dereferencing_value); - if (qq is exit_procedure && stl.list.Count == 1) + if (qq is exit_procedure && stl.list.Count == 1 || qq is local_block_variable_reference && qq.type is compiled_type_node && (qq.type as compiled_type_node).compiled_type == typeof(Action)) { // SSM #2172 27/06/20 - тело - это вызов exit stl.list[0] = new procedure_call(ff, ff.source_context);