diff --git a/TestSuite/tuple_var3.pas b/TestSuite/tuple_var3.pas new file mode 100644 index 000000000..3b53ad47b --- /dev/null +++ b/TestSuite/tuple_var3.pas @@ -0,0 +1,16 @@ +type c1 = class end; + +begin + var i := 0; + // OK + foreach var (a,b) in ||new object, new object|| do + //Ошибка: Ожидалась последовательность кортежей или последовательностей + foreach var (c,d) in ||new c1, new c1|| do + begin + assert(c <> nil); + assert(d <> nil); + assert(c <> d); + i := 1; + end; + assert(i = 1); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs index c60ae0547..0a30a594d 100644 --- a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs +++ b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs @@ -89,7 +89,14 @@ namespace PascalABCCompiler.TreeConverter { var t = ConvertSemanticTypeNodeToNETType(elem_type); if (t == null) + { + bool bb; + type_node tn = null; + if (FindIEnumerableElementType(elem_type, ref tn, out bb)) + return; AddError(inwhatloc, "TUPLE_OR_SEQUENCE_EXPECTED_FOREACH"); + } + var IsTuple = IsTupleType(t); var IsSequence = !IsTuple && IsSequenceType(t);