This commit is contained in:
Бондарев Иван 2020-09-20 12:33:21 +02:00
parent 067971a5ce
commit a75e97e423
2 changed files with 20 additions and 0 deletions

14
TestSuite/foreach8.pas Normal file
View file

@ -0,0 +1,14 @@
type
t1 = class(List<integer>) end;
begin
var l := new t1;
l.Add(1);
l.Add(2);
var i := 1;
foreach var x in l do
begin
assert(i = x);
Inc(i);
end;
end.

View file

@ -17921,7 +17921,11 @@ namespace PascalABCCompiler.TreeConverter
// Попытка реализовать IEnumerable<T> натыкается на необходимость определять GetEnumerator, возвращающий IEnumerator и IEnumerator<T>
{
if (tn == null || tn is null_type_node || tn.ImplementingInterfaces == null)
{
if (tn != null && tn.base_type != null)
return FindIEnumerableElementType(tn.base_type, ref elem_type, out sys_coll_ienum);
return false;
}
if (tn.element_type != null && tn.type_special_kind != SemanticTree.type_special_kind.typed_file) // еще может быть множество set of T - 22.02.16 SSM
{
@ -17968,6 +17972,8 @@ namespace PascalABCCompiler.TreeConverter
}
}
}
if (tn != null && tn.base_type != null)
return FindIEnumerableElementType(tn.base_type, ref elem_type, out sys_coll_ienum);
return false;
}