diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index bde439b0382..34e8a6336ae 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -298,6 +298,7 @@ namespace ts { let typeCount = 0; let symbolCount = 0; let enumCount = 0; + let totalInstantiationCount = 0; let instantiationCount = 0; let instantiationDepth = 0; let constraintDepth = 0; @@ -348,6 +349,7 @@ namespace ts { getIdentifierCount: () => sum(host.getSourceFiles(), "identifierCount"), getSymbolCount: () => sum(host.getSourceFiles(), "symbolCount") + symbolCount, getTypeCount: () => typeCount, + getInstantiationCount: () => totalInstantiationCount, getRelationCacheSizes: () => ({ assignable: assignableRelation.size, identity: identityRelation.size, @@ -13775,6 +13777,7 @@ namespace ts { error(currentNode, Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite); return errorType; } + totalInstantiationCount++; instantiationCount++; instantiationDepth++; const result = instantiateTypeWorker(type, mapper); diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 4675ae8493d..3519e07ab46 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -946,6 +946,7 @@ namespace ts { getIdentifierCount: () => getDiagnosticsProducingTypeChecker().getIdentifierCount(), getSymbolCount: () => getDiagnosticsProducingTypeChecker().getSymbolCount(), getTypeCount: () => getDiagnosticsProducingTypeChecker().getTypeCount(), + getInstantiationCount: () => getDiagnosticsProducingTypeChecker().getInstantiationCount(), getRelationCacheSizes: () => getDiagnosticsProducingTypeChecker().getRelationCacheSizes(), getFileProcessingDiagnostics: () => fileProcessingDiagnostics, getResolvedTypeReferenceDirectives: () => resolvedTypeReferenceDirectives, diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 74cd04d7674..36c3f44268d 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3235,6 +3235,7 @@ namespace ts { getIdentifierCount(): number; getSymbolCount(): number; getTypeCount(): number; + getInstantiationCount(): number; getRelationCacheSizes(): { assignable: number, identity: number, subtype: number, strictSubtype: number }; /* @internal */ getFileProcessingDiagnostics(): DiagnosticCollection; @@ -3557,6 +3558,7 @@ namespace ts { /* @internal */ getIdentifierCount(): number; /* @internal */ getSymbolCount(): number; /* @internal */ getTypeCount(): number; + /* @internal */ getInstantiationCount(): number; /* @internal */ getRelationCacheSizes(): { assignable: number, identity: number, subtype: number, strictSubtype: number }; /* @internal */ isArrayType(type: Type): boolean; diff --git a/src/executeCommandLine/executeCommandLine.ts b/src/executeCommandLine/executeCommandLine.ts index 6ce8e90a1df..e66b55d9b55 100644 --- a/src/executeCommandLine/executeCommandLine.ts +++ b/src/executeCommandLine/executeCommandLine.ts @@ -639,6 +639,7 @@ namespace ts { reportCountStatistic("Identifiers", program.getIdentifierCount()); reportCountStatistic("Symbols", program.getSymbolCount()); reportCountStatistic("Types", program.getTypeCount()); + reportCountStatistic("Instantiations", program.getInstantiationCount()); if (memoryUsed >= 0) { reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K"); diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 45f4d38414e..03a59f53345 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -1952,6 +1952,7 @@ declare namespace ts { getIdentifierCount(): number; getSymbolCount(): number; getTypeCount(): number; + getInstantiationCount(): number; getRelationCacheSizes(): { assignable: number; identity: number; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 83e2a6ac5d4..469e9e5b6aa 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -1952,6 +1952,7 @@ declare namespace ts { getIdentifierCount(): number; getSymbolCount(): number; getTypeCount(): number; + getInstantiationCount(): number; getRelationCacheSizes(): { assignable: number; identity: number;