Skip to content

Commit 197a42a

Browse files
committed
Optimize direct Iterable reference in getIteratedType
1 parent e1f2fbf commit 197a42a

7 files changed

Lines changed: 49 additions & 0 deletions

File tree

src/compiler/checker.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9346,6 +9346,12 @@ module ts {
93469346
return undefined;
93479347
}
93489348

9349+
// As an optimization, if the type is instantiated directly using the globalIterableType (Iterable<number>),
9350+
// then just grab its type argument.
9351+
if ((iterable.flags & TypeFlags.Reference) && (<GenericType>iterable).target === globalIterableType) {
9352+
return (<GenericType>iterable).typeArguments[0];
9353+
}
9354+
93499355
let iteratorFunction = getTypeOfPropertyOfType(iterable, getPropertyNameForKnownSymbolName("iterator"));
93509356
if (iteratorFunction && allConstituentTypesHaveKind(iteratorFunction, TypeFlags.Any)) {
93519357
return undefined;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//// [for-of57.ts]
2+
var iter: Iterable<number>;
3+
for (let num of iter) { }
4+
5+
//// [for-of57.js]
6+
var iter;
7+
for (let num of iter) {
8+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
=== tests/cases/conformance/es6/for-ofStatements/for-of57.ts ===
2+
var iter: Iterable<number>;
3+
>iter : Iterable<number>
4+
>Iterable : Iterable<T>
5+
6+
for (let num of iter) { }
7+
>num : number
8+
>iter : Iterable<number>
9+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//// [iteratorSpreadInArray11.ts]
2+
var iter: Iterable<number>;
3+
var array = [...iter];
4+
5+
//// [iteratorSpreadInArray11.js]
6+
var iter;
7+
var array = [
8+
...iter
9+
];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/conformance/es6/spread/iteratorSpreadInArray11.ts ===
2+
var iter: Iterable<number>;
3+
>iter : Iterable<number>
4+
>Iterable : Iterable<T>
5+
6+
var array = [...iter];
7+
>array : number[]
8+
>[...iter] : number[]
9+
>...iter : number
10+
>iter : Iterable<number>
11+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
//@target: ES6
2+
var iter: Iterable<number>;
3+
for (let num of iter) { }
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
//@target: ES6
2+
var iter: Iterable<number>;
3+
var array = [...iter];

0 commit comments

Comments
 (0)