Optimize direct Iterable reference in getIteratedType
This commit is contained in:
parent
e1f2fbff63
commit
197a42a692
7 changed files with 49 additions and 0 deletions
|
@ -9346,6 +9346,12 @@ module ts {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
// As an optimization, if the type is instantiated directly using the globalIterableType (Iterable<number>),
|
||||
// then just grab its type argument.
|
||||
if ((iterable.flags & TypeFlags.Reference) && (<GenericType>iterable).target === globalIterableType) {
|
||||
return (<GenericType>iterable).typeArguments[0];
|
||||
}
|
||||
|
||||
let iteratorFunction = getTypeOfPropertyOfType(iterable, getPropertyNameForKnownSymbolName("iterator"));
|
||||
if (iteratorFunction && allConstituentTypesHaveKind(iteratorFunction, TypeFlags.Any)) {
|
||||
return undefined;
|
||||
|
|
8
tests/baselines/reference/for-of57.js
Normal file
8
tests/baselines/reference/for-of57.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
//// [for-of57.ts]
|
||||
var iter: Iterable<number>;
|
||||
for (let num of iter) { }
|
||||
|
||||
//// [for-of57.js]
|
||||
var iter;
|
||||
for (let num of iter) {
|
||||
}
|
9
tests/baselines/reference/for-of57.types
Normal file
9
tests/baselines/reference/for-of57.types
Normal file
|
@ -0,0 +1,9 @@
|
|||
=== tests/cases/conformance/es6/for-ofStatements/for-of57.ts ===
|
||||
var iter: Iterable<number>;
|
||||
>iter : Iterable<number>
|
||||
>Iterable : Iterable<T>
|
||||
|
||||
for (let num of iter) { }
|
||||
>num : number
|
||||
>iter : Iterable<number>
|
||||
|
9
tests/baselines/reference/iteratorSpreadInArray11.js
Normal file
9
tests/baselines/reference/iteratorSpreadInArray11.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
//// [iteratorSpreadInArray11.ts]
|
||||
var iter: Iterable<number>;
|
||||
var array = [...iter];
|
||||
|
||||
//// [iteratorSpreadInArray11.js]
|
||||
var iter;
|
||||
var array = [
|
||||
...iter
|
||||
];
|
11
tests/baselines/reference/iteratorSpreadInArray11.types
Normal file
11
tests/baselines/reference/iteratorSpreadInArray11.types
Normal file
|
@ -0,0 +1,11 @@
|
|||
=== tests/cases/conformance/es6/spread/iteratorSpreadInArray11.ts ===
|
||||
var iter: Iterable<number>;
|
||||
>iter : Iterable<number>
|
||||
>Iterable : Iterable<T>
|
||||
|
||||
var array = [...iter];
|
||||
>array : number[]
|
||||
>[...iter] : number[]
|
||||
>...iter : number
|
||||
>iter : Iterable<number>
|
||||
|
3
tests/cases/conformance/es6/for-ofStatements/for-of57.ts
Normal file
3
tests/cases/conformance/es6/for-ofStatements/for-of57.ts
Normal file
|
@ -0,0 +1,3 @@
|
|||
//@target: ES6
|
||||
var iter: Iterable<number>;
|
||||
for (let num of iter) { }
|
|
@ -0,0 +1,3 @@
|
|||
//@target: ES6
|
||||
var iter: Iterable<number>;
|
||||
var array = [...iter];
|
Loading…
Reference in a new issue