From 8903c838c74918bc9d53b40f1ba8e9bad4e4b6ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Sun, 9 Feb 2020 12:58:12 +0100 Subject: [PATCH] bug fix #2186 --- TestSuite/lambda_enums.pas | 15 +++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 11 +++++++++++ 2 files changed, 26 insertions(+) create mode 100644 TestSuite/lambda_enums.pas diff --git a/TestSuite/lambda_enums.pas b/TestSuite/lambda_enums.pas new file mode 100644 index 000000000..048eb6767 --- /dev/null +++ b/TestSuite/lambda_enums.pas @@ -0,0 +1,15 @@ +procedure test; +begin + var o: (a, b) := a; + assert(o = a); + var p: ()->() := ()->exit(); +end; + +begin + var o: (a, b) := a; + assert(o = a); + var p: ()->() := ()->begin o := b end; + p; + assert(o = b); + test; +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 40effaf03..9c84e74cd 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -3422,9 +3422,20 @@ namespace PascalABCCompiler.TreeConverter var si = context.CurrentScope.Find(id.name); if ((si==null) || !(si.FirstOrDefault().sym_info is type_node)) { + if (si != null && si.FirstOrDefault().sym_info is constant_definition_node) + { + constant_definition_node ncd = si.FirstOrDefault().sym_info as constant_definition_node; + if (_enum_type_definition.source_context != null && ncd.type.location != null && ncd.type.location.begin_line_num == _enum_type_definition.source_context.begin_position.line_num + && ncd.type.location.begin_column_num == _enum_type_definition.source_context.begin_position.column_num && ncd.type.location.doc.file_name == _enum_type_definition.source_context.FileName) + { + return_value(ncd.type); + return; + } + } is_enum = true; break; } + } if (!is_enum) // Значит, это определение типа