Skip to content

Commit 0369ecd

Browse files
committed
Merge branch 'master' into mergeMasterInRelease1.6
2 parents 6cd2a47 + 29ec6b0 commit 0369ecd

File tree

9 files changed

+209
-1
lines changed

9 files changed

+209
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3119,7 +3119,7 @@ namespace ts {
31193119
}
31203120

31213121
function resolveTupleTypeMembers(type: TupleType) {
3122-
let arrayType = resolveStructuredTypeMembers(createArrayType(getUnionType(type.elementTypes)));
3122+
let arrayType = resolveStructuredTypeMembers(createArrayType(getUnionType(type.elementTypes, /*noDeduplication*/ true)));
31233123
let members = createTupleTypeMemberSymbols(type.elementTypes);
31243124
addInheritedMembers(members, arrayType.properties);
31253125
setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexType, arrayType.numberIndexType);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [recursiveTupleTypes1.ts]
2+
interface Tree1 {
3+
children: [Tree1, Tree2];
4+
}
5+
6+
interface Tree2 {
7+
children: [Tree2, Tree1];
8+
}
9+
10+
let tree1: Tree1;
11+
let tree2: Tree2;
12+
tree1 = tree2;
13+
tree2 = tree1;
14+
15+
16+
//// [recursiveTupleTypes1.js]
17+
var tree1;
18+
var tree2;
19+
tree1 = tree2;
20+
tree2 = tree1;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/compiler/recursiveTupleTypes1.ts ===
2+
interface Tree1 {
3+
>Tree1 : Symbol(Tree1, Decl(recursiveTupleTypes1.ts, 0, 0))
4+
5+
children: [Tree1, Tree2];
6+
>children : Symbol(children, Decl(recursiveTupleTypes1.ts, 0, 17))
7+
>Tree1 : Symbol(Tree1, Decl(recursiveTupleTypes1.ts, 0, 0))
8+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes1.ts, 2, 1))
9+
}
10+
11+
interface Tree2 {
12+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes1.ts, 2, 1))
13+
14+
children: [Tree2, Tree1];
15+
>children : Symbol(children, Decl(recursiveTupleTypes1.ts, 4, 17))
16+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes1.ts, 2, 1))
17+
>Tree1 : Symbol(Tree1, Decl(recursiveTupleTypes1.ts, 0, 0))
18+
}
19+
20+
let tree1: Tree1;
21+
>tree1 : Symbol(tree1, Decl(recursiveTupleTypes1.ts, 8, 3))
22+
>Tree1 : Symbol(Tree1, Decl(recursiveTupleTypes1.ts, 0, 0))
23+
24+
let tree2: Tree2;
25+
>tree2 : Symbol(tree2, Decl(recursiveTupleTypes1.ts, 9, 3))
26+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes1.ts, 2, 1))
27+
28+
tree1 = tree2;
29+
>tree1 : Symbol(tree1, Decl(recursiveTupleTypes1.ts, 8, 3))
30+
>tree2 : Symbol(tree2, Decl(recursiveTupleTypes1.ts, 9, 3))
31+
32+
tree2 = tree1;
33+
>tree2 : Symbol(tree2, Decl(recursiveTupleTypes1.ts, 9, 3))
34+
>tree1 : Symbol(tree1, Decl(recursiveTupleTypes1.ts, 8, 3))
35+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/compiler/recursiveTupleTypes1.ts ===
2+
interface Tree1 {
3+
>Tree1 : Tree1
4+
5+
children: [Tree1, Tree2];
6+
>children : [Tree1, Tree2]
7+
>Tree1 : Tree1
8+
>Tree2 : Tree2
9+
}
10+
11+
interface Tree2 {
12+
>Tree2 : Tree2
13+
14+
children: [Tree2, Tree1];
15+
>children : [Tree2, Tree1]
16+
>Tree2 : Tree2
17+
>Tree1 : Tree1
18+
}
19+
20+
let tree1: Tree1;
21+
>tree1 : Tree1
22+
>Tree1 : Tree1
23+
24+
let tree2: Tree2;
25+
>tree2 : Tree2
26+
>Tree2 : Tree2
27+
28+
tree1 = tree2;
29+
>tree1 = tree2 : Tree2
30+
>tree1 : Tree1
31+
>tree2 : Tree2
32+
33+
tree2 = tree1;
34+
>tree2 = tree1 : Tree1
35+
>tree2 : Tree2
36+
>tree1 : Tree1
37+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [recursiveTupleTypes2.ts]
2+
interface Tree1 {
3+
children: [Tree1, Tree2];
4+
}
5+
6+
interface Tree2 {
7+
children: [Tree2, Tree2];
8+
}
9+
10+
let tree1: Tree1;
11+
let tree2: Tree2;
12+
tree1 = tree2;
13+
tree2 = tree1;
14+
15+
16+
//// [recursiveTupleTypes2.js]
17+
var tree1;
18+
var tree2;
19+
tree1 = tree2;
20+
tree2 = tree1;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/compiler/recursiveTupleTypes2.ts ===
2+
interface Tree1 {
3+
>Tree1 : Symbol(Tree1, Decl(recursiveTupleTypes2.ts, 0, 0))
4+
5+
children: [Tree1, Tree2];
6+
>children : Symbol(children, Decl(recursiveTupleTypes2.ts, 0, 17))
7+
>Tree1 : Symbol(Tree1, Decl(recursiveTupleTypes2.ts, 0, 0))
8+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes2.ts, 2, 1))
9+
}
10+
11+
interface Tree2 {
12+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes2.ts, 2, 1))
13+
14+
children: [Tree2, Tree2];
15+
>children : Symbol(children, Decl(recursiveTupleTypes2.ts, 4, 17))
16+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes2.ts, 2, 1))
17+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes2.ts, 2, 1))
18+
}
19+
20+
let tree1: Tree1;
21+
>tree1 : Symbol(tree1, Decl(recursiveTupleTypes2.ts, 8, 3))
22+
>Tree1 : Symbol(Tree1, Decl(recursiveTupleTypes2.ts, 0, 0))
23+
24+
let tree2: Tree2;
25+
>tree2 : Symbol(tree2, Decl(recursiveTupleTypes2.ts, 9, 3))
26+
>Tree2 : Symbol(Tree2, Decl(recursiveTupleTypes2.ts, 2, 1))
27+
28+
tree1 = tree2;
29+
>tree1 : Symbol(tree1, Decl(recursiveTupleTypes2.ts, 8, 3))
30+
>tree2 : Symbol(tree2, Decl(recursiveTupleTypes2.ts, 9, 3))
31+
32+
tree2 = tree1;
33+
>tree2 : Symbol(tree2, Decl(recursiveTupleTypes2.ts, 9, 3))
34+
>tree1 : Symbol(tree1, Decl(recursiveTupleTypes2.ts, 8, 3))
35+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/compiler/recursiveTupleTypes2.ts ===
2+
interface Tree1 {
3+
>Tree1 : Tree1
4+
5+
children: [Tree1, Tree2];
6+
>children : [Tree1, Tree2]
7+
>Tree1 : Tree1
8+
>Tree2 : Tree2
9+
}
10+
11+
interface Tree2 {
12+
>Tree2 : Tree2
13+
14+
children: [Tree2, Tree2];
15+
>children : [Tree2, Tree2]
16+
>Tree2 : Tree2
17+
>Tree2 : Tree2
18+
}
19+
20+
let tree1: Tree1;
21+
>tree1 : Tree1
22+
>Tree1 : Tree1
23+
24+
let tree2: Tree2;
25+
>tree2 : Tree2
26+
>Tree2 : Tree2
27+
28+
tree1 = tree2;
29+
>tree1 = tree2 : Tree2
30+
>tree1 : Tree1
31+
>tree2 : Tree2
32+
33+
tree2 = tree1;
34+
>tree2 = tree1 : Tree1
35+
>tree2 : Tree2
36+
>tree1 : Tree1
37+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
interface Tree1 {
2+
children: [Tree1, Tree2];
3+
}
4+
5+
interface Tree2 {
6+
children: [Tree2, Tree1];
7+
}
8+
9+
let tree1: Tree1;
10+
let tree2: Tree2;
11+
tree1 = tree2;
12+
tree2 = tree1;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
interface Tree1 {
2+
children: [Tree1, Tree2];
3+
}
4+
5+
interface Tree2 {
6+
children: [Tree2, Tree2];
7+
}
8+
9+
let tree1: Tree1;
10+
let tree2: Tree2;
11+
tree1 = tree2;
12+
tree2 = tree1;

0 commit comments

Comments
 (0)