From 4f3fcec9417c8c9d513a2d210af964a7d826a6dd Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Wed, 27 Dec 2023 19:30:22 +0100 Subject: [PATCH] #2829 --- TestSuite/where20.pas | 20 ++++++++++++++++++- .../TreeConversion/syntax_tree_visitor.cs | 3 ++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/TestSuite/where20.pas b/TestSuite/where20.pas index 9999c6cb0..c1161fe32 100644 --- a/TestSuite/where20.pas +++ b/TestSuite/where20.pas @@ -14,8 +14,9 @@ c2 = class // Если объявить сначала "where T1" - тоже должно работать + where T1: T2; where T2: IComparable; - where T1: T2; + function f1(o: T1): integer; begin @@ -25,6 +26,20 @@ end; + c3 = class + // Если объявить сначала "where T1" - тоже должно работать + where T1: T2, System.ICloneable; + where T2: IComparable; + + + function f1(o: T1): integer; + begin + //Ошибка: Неизвестное имя 'CompareTo' + var c := o.Clone(); + Result := o.CompareTo(o); + end; + + end; begin var a := new c1; @@ -32,4 +47,7 @@ begin var b := new c2; assert(b.f1('abc') = 0); + + var c := new c3; + assert(c.f1('abc') = 0); end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index e62da2762..611c945a5 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -12984,9 +12984,10 @@ namespace PascalABCCompiler.TreeConverter { if (ctn.base_type != null && ctn.base_type.is_generic_parameter && ctn.base_type.ImplementingInterfaces != null && ctn.base_type.ImplementingInterfaces.Count > 0) { - foreach (type_node tn in ctn.ImplementingInterfaces) + foreach (type_node tn in ctn.base_type.ImplementingInterfaces) { type_table.AddInterface(ctn, tn, null); + InitInterfaceScope(ctn); } } }