From debd0ddee68443ea536e9cf6727f522b777df686 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Wed, 6 Jan 2021 10:49:10 +0100 Subject: [PATCH] #2237 --- TestSuite/lambdas10.pas | 13 +++++++++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 TestSuite/lambdas10.pas 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);