From 4893429c2b864f60a42fda0fdb643fabb85dab46 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 10 Jan 2021 12:32:33 +0100 Subject: [PATCH] #2327 --- .../ProcessYieldsCapturedVars.cs | 9 +++++++- TestSuite/yield5.pas | 23 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 TestSuite/yield5.pas diff --git a/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs b/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs index ba111d911..2f463d879 100644 --- a/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs +++ b/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs @@ -347,7 +347,14 @@ namespace SyntaxVisitors { if (className is template_type_name) { - return new template_type_name(helperName, (className as template_type_name).template_args); + if (pd.proc_header.template_args != null) + { + var template_args = (className as template_type_name).template_args.Clone() as ident_list; + template_args.AddMany(pd.proc_header.template_args.idents.ToArray()); + return new template_type_name(helperName, template_args); + } + else + return new template_type_name(helperName, (className as template_type_name).template_args); } else if (pd.proc_header.template_args != null) { diff --git a/TestSuite/yield5.pas b/TestSuite/yield5.pas new file mode 100644 index 000000000..af497d2f1 --- /dev/null +++ b/TestSuite/yield5.pas @@ -0,0 +1,23 @@ +type + c1 = class + + function f1: sequence of T2; + begin + + var s: T2; + var s1: T1; + yield s; + end; + + end; + +begin + var o := new c1; + var i: integer; + foreach var e in o.f1& do + begin + assert(e = 0); + Inc(i); + end; + assert(i = 1); +end. \ No newline at end of file