From 0d85e872d3f3060a1686f9a1152cac8815589e3e Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 2 Jul 2023 12:27:07 +0200 Subject: [PATCH] #2896 --- TestSuite/yield7.pas | 28 +++++++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 11 +++++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 TestSuite/yield7.pas diff --git a/TestSuite/yield7.pas b/TestSuite/yield7.pas new file mode 100644 index 000000000..c9edf139c --- /dev/null +++ b/TestSuite/yield7.pas @@ -0,0 +1,28 @@ +type + // Обязательно шаблон + //Ошибка: Данная конструкция не поддерживается текущей версией компилятора + t1 = sealed class + + // Обязательно static + static procedure p1 := exit; + + function f1: sequence of byte; + begin + // Если расскомментировать - не воспроизводится +// t1&. + p1; + // Обязательно yield + yield 1; + end; + + end; + +begin + var t := new t1; + var j := 0; + foreach var i in t.f1 do + begin + j := i; + end; + assert(j = 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 d61593d57..d97abd326 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -20424,7 +20424,16 @@ namespace PascalABCCompiler.TreeConverter public override void visit(SyntaxTree.template_type_name node) { - throw new NotSupportedError(get_location(node)); + //throw new NotSupportedError(get_location(node)); + ident_with_templateparams id = new ident_with_templateparams(); + if (node.name.IndexOf('`') != -1 ) + id.name = new ident(node.name.Substring(0, node.name.IndexOf('`')), node.source_context); + else + id.name = new ident(node.name, node.source_context); + id.template_params = new template_param_list(); + for (int i = 0; i < node.template_args.Count; i++) + id.template_params.Add(new named_type_reference(node.template_args[0] as SyntaxTree.ident, node.template_args[i].source_context)); + id.visit(this); } public override void visit(SyntaxTree.default_operator _default_operator)