mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-04-17 13:48:46 -05:00
Add fast paths for 'BuiltinIterator' and 'AsyncBuiltinIterator' (#59368)
This commit is contained in:
@@ -1176,6 +1176,7 @@ interface IterationTypesResolver {
|
||||
getGlobalIteratorType: (reportErrors: boolean) => GenericType;
|
||||
getGlobalIterableType: (reportErrors: boolean) => GenericType;
|
||||
getGlobalIterableIteratorType: (reportErrors: boolean) => GenericType;
|
||||
getGlobalBuiltinIteratorType: (reportErrors: boolean) => GenericType;
|
||||
getGlobalGeneratorType: (reportErrors: boolean) => GenericType;
|
||||
resolveIterationType: (type: Type, errorNode: Node | undefined) => Type | undefined;
|
||||
mustHaveANextMethodDiagnostic: DiagnosticMessage;
|
||||
@@ -2159,6 +2160,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
getGlobalIteratorType: getGlobalAsyncIteratorType,
|
||||
getGlobalIterableType: getGlobalAsyncIterableType,
|
||||
getGlobalIterableIteratorType: getGlobalAsyncIterableIteratorType,
|
||||
getGlobalBuiltinIteratorType: getGlobalAsyncBuiltinIteratorType,
|
||||
getGlobalGeneratorType: getGlobalAsyncGeneratorType,
|
||||
resolveIterationType: (type, errorNode) => getAwaitedType(type, errorNode, Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member),
|
||||
mustHaveANextMethodDiagnostic: Diagnostics.An_async_iterator_must_have_a_next_method,
|
||||
@@ -2173,6 +2175,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
getGlobalIteratorType,
|
||||
getGlobalIterableType,
|
||||
getGlobalIterableIteratorType,
|
||||
getGlobalBuiltinIteratorType,
|
||||
getGlobalGeneratorType,
|
||||
resolveIterationType: (type, _errorNode) => type,
|
||||
mustHaveANextMethodDiagnostic: Diagnostics.An_iterator_must_have_a_next_method,
|
||||
@@ -2234,12 +2237,14 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
var deferredGlobalIterableType: GenericType | undefined;
|
||||
var deferredGlobalIteratorType: GenericType | undefined;
|
||||
var deferredGlobalIterableIteratorType: GenericType | undefined;
|
||||
var deferredGlobalBuiltinIteratorType: GenericType | undefined;
|
||||
var deferredGlobalGeneratorType: GenericType | undefined;
|
||||
var deferredGlobalIteratorYieldResultType: GenericType | undefined;
|
||||
var deferredGlobalIteratorReturnResultType: GenericType | undefined;
|
||||
var deferredGlobalAsyncIterableType: GenericType | undefined;
|
||||
var deferredGlobalAsyncIteratorType: GenericType | undefined;
|
||||
var deferredGlobalAsyncIterableIteratorType: GenericType | undefined;
|
||||
var deferredGlobalAsyncBuiltinIteratorType: GenericType | undefined;
|
||||
var deferredGlobalAsyncGeneratorType: GenericType | undefined;
|
||||
var deferredGlobalTemplateStringsArrayType: ObjectType | undefined;
|
||||
var deferredGlobalImportMetaType: ObjectType;
|
||||
@@ -16930,6 +16935,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
return (deferredGlobalAsyncIterableIteratorType ||= getGlobalType("AsyncIterableIterator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType;
|
||||
}
|
||||
|
||||
function getGlobalAsyncBuiltinIteratorType(reportErrors: boolean) {
|
||||
return (deferredGlobalAsyncBuiltinIteratorType ||= getGlobalType("AsyncBuiltinIterator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType;
|
||||
}
|
||||
|
||||
function getGlobalAsyncGeneratorType(reportErrors: boolean) {
|
||||
return (deferredGlobalAsyncGeneratorType ||= getGlobalType("AsyncGenerator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType;
|
||||
}
|
||||
@@ -16946,6 +16955,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
return (deferredGlobalIterableIteratorType ||= getGlobalType("IterableIterator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType;
|
||||
}
|
||||
|
||||
function getGlobalBuiltinIteratorType(reportErrors: boolean) {
|
||||
return (deferredGlobalBuiltinIteratorType ||= getGlobalType("BuiltinIterator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType;
|
||||
}
|
||||
|
||||
function getGlobalGeneratorType(reportErrors: boolean) {
|
||||
return (deferredGlobalGeneratorType ||= getGlobalType("Generator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType;
|
||||
}
|
||||
@@ -44773,10 +44786,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
// As an optimization, if the type is an instantiation of the following global type, then
|
||||
// just grab its related type arguments:
|
||||
// - `Iterable<T, TReturn, TNext>` or `AsyncIterable<T, TReturn, TNext>`
|
||||
// - `BuiltinIterator<T, TReturn, TNext>` or `AsyncBuiltinIterator<T, TReturn, TNext>`
|
||||
// - `IterableIterator<T, TReturn, TNext>` or `AsyncIterableIterator<T, TReturn, TNext>`
|
||||
// - `Generator<T, TReturn, TNext>` or `AsyncGenerator<T, TReturn, TNext>`
|
||||
if (
|
||||
isReferenceToType(type, resolver.getGlobalIterableType(/*reportErrors*/ false)) ||
|
||||
isReferenceToType(type, resolver.getGlobalBuiltinIteratorType(/*reportErrors*/ false)) ||
|
||||
isReferenceToType(type, resolver.getGlobalIterableIteratorType(/*reportErrors*/ false)) ||
|
||||
isReferenceToType(type, resolver.getGlobalGeneratorType(/*reportErrors*/ false))
|
||||
) {
|
||||
@@ -44899,9 +44914,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
// As an optimization, if the type is an instantiation of one of the following global types,
|
||||
// then just grab its related type arguments:
|
||||
// - `IterableIterator<T, TReturn, TNext>` or `AsyncIterableIterator<T, TReturn, TNext>`
|
||||
// - `BuiltinIterator<T, TReturn, TNext>` or `AsyncBuiltinIterator<T, TReturn, TNext>`
|
||||
// - `Iterator<T, TReturn, TNext>` or `AsyncIterator<T, TReturn, TNext>`
|
||||
// - `Generator<T, TReturn, TNext>` or `AsyncGenerator<T, TReturn, TNext>`
|
||||
if (
|
||||
isReferenceToType(type, resolver.getGlobalBuiltinIteratorType(/*reportErrors*/ false)) ||
|
||||
isReferenceToType(type, resolver.getGlobalIterableIteratorType(/*reportErrors*/ false)) ||
|
||||
isReferenceToType(type, resolver.getGlobalIteratorType(/*reportErrors*/ false)) ||
|
||||
isReferenceToType(type, resolver.getGlobalGeneratorType(/*reportErrors*/ false))
|
||||
|
||||
Reference in New Issue
Block a user