diff --git a/TestSuite/ForeachResolver/foreach_resolver.pas b/TestSuite/ForeachResolver/foreach_resolver.pas new file mode 100644 index 000000000..c61937fea --- /dev/null +++ b/TestSuite/ForeachResolver/foreach_resolver.pas @@ -0,0 +1,48 @@ +{$reference 'foreach_resolver_lib.dll'} + +type + c0 = class + procedure pr:= exit; + end; + +begin + var v1:= new c1; + v1._element:= new c0; + + foreach var item in v1 do + item.pr; + + Assert(check); + check:= false; + + var v2:= new c2; + v2._element:= 'myStr'; + foreach var item in v2 do + item.Replace('my', 'your'); + + Assert(check); + check:= false; + + var v3:= new c3; + v3._element:= 'myStr'; + foreach var item in v3 do + print(item); + + Assert(check); + check:= false; + + var v4:= new c4; + v4._element:= 'myStr'; + foreach var item in v4 do + item.Replace('my', 'your'); + + Assert(check); + check:= false; + + var v5:= new c5; + v5._element:= 4; + foreach var item in v5 do + Assert(item = 4); + + Assert(check); +end. \ No newline at end of file diff --git a/TestSuite/ForeachResolver/foreach_resolver_lib.dll b/TestSuite/ForeachResolver/foreach_resolver_lib.dll new file mode 100644 index 000000000..7ba778e58 Binary files /dev/null and b/TestSuite/ForeachResolver/foreach_resolver_lib.dll differ diff --git a/TestSuite/ForeachResolver/foreach_resolver_lib.pas b/TestSuite/ForeachResolver/foreach_resolver_lib.pas new file mode 100644 index 000000000..3f629a79e --- /dev/null +++ b/TestSuite/ForeachResolver/foreach_resolver_lib.pas @@ -0,0 +1,58 @@ +library foreach_resolver_lib; + uses System.Collections, System.Collections.Generic; + + var check:= false; + + type + c1 = class (IEnumerable, IEnumerable) + public + _element: T2; + + function GetEnumerator: IEnumerator; + begin + check:= true; + result:= lst( _element ).GetEnumerator; + end; + + function IEnumerable.GetEnumerator: IEnumerator; + begin end; + + function IEnumerable.GetEnumerator: IEnumerator; + begin end; + end; + + c2 = class (IEnumerable, IEnumerable) + public + _element: string; + + function GetEnumerator: IEnumerator; + begin + check:= true; + result:= lst(_element).GetEnumerator; + end; + + function IEnumerable.GetEnumerator: IEnumerator; + begin end; + + function IEnumerable.GetEnumerator: IEnumerator; + begin end; + end; + + c3 = class (IEnumerable) + public + _element: object; + + function IEnumerable.GetEnumerator: IEnumerator; + begin end; + + function GetEnumerator: IEnumerator; + begin + check:= true; + result:= |_element|.GetEnumerator; + end; + end; + + c4 = class (c2) end; + + c5 = class (c1) end; +end. \ No newline at end of file