From b895f2823c97c74c1d31afd266fae8058a8ec04a 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, 20 Oct 2019 14:12:23 +0200 Subject: [PATCH] bug fix #2024 --- TestSuite/namespaces/nsyield1.pas | 12 ++++++++++++ TestSuite/use_ns_yield1.pas | 7 +++++++ .../TreeConversion/syntax_tree_visitor.cs | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 TestSuite/namespaces/nsyield1.pas create mode 100644 TestSuite/use_ns_yield1.pas diff --git a/TestSuite/namespaces/nsyield1.pas b/TestSuite/namespaces/nsyield1.pas new file mode 100644 index 000000000..fab5ad864 --- /dev/null +++ b/TestSuite/namespaces/nsyield1.pas @@ -0,0 +1,12 @@ +namespace nsyield1; + +type + T1 = class + public static function Seq(): sequence of integer; + begin + yield 1; + end; + end; + + +end. \ No newline at end of file diff --git a/TestSuite/use_ns_yield1.pas b/TestSuite/use_ns_yield1.pas new file mode 100644 index 000000000..e70d149e3 --- /dev/null +++ b/TestSuite/use_ns_yield1.pas @@ -0,0 +1,7 @@ +//nopabcrtl +{$includenamespace 'namespaces/nsyield1.pas'} + +uses nsyield1; +begin + assert(T1.Seq().ToArray()[0] = 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 e2b2f8718..1852765f3 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -10991,6 +10991,10 @@ namespace PascalABCCompiler.TreeConverter } } + else if (decl is procedure_definition && get_location(decl) == null) + { + //yield + } else AddError(get_location(decl), "NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES"); } @@ -11043,6 +11047,20 @@ namespace PascalABCCompiler.TreeConverter } } } + + } + context.leave_scope(); + } + foreach (syntax_namespace_node _syntax_namespace_node in namespaces) + { + common_namespace_node cmn = dict[_syntax_namespace_node]; + context.enter_scope(cmn.scope); + foreach (declaration decl in _syntax_namespace_node.defs) + { + if (decl is procedure_definition) + { + hard_node_test_and_visit(decl); + } } context.leave_scope(); }