From 56a4a93718ce016f038bcbce425bd3f47c3bec78 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 15 Apr 2022 15:11:30 -0700 Subject: [PATCH] Instead of maintaining cache id etc, reset the "working" exports map cache. (#48579) * Revert "Avoid no-op export map updates (#45238)" This reverts commit 0f6e6efde08385916602e254f406f1703907b2a5. * Need to reset currentAffectedFilesExportedModulesMap after commiting to final exports map --- src/compiler/builder.ts | 1 + src/compiler/builderState.ts | 46 +++++++----------------------------- 2 files changed, 10 insertions(+), 37 deletions(-) diff --git a/src/compiler/builder.ts b/src/compiler/builder.ts index 534276354f0..9d4ce0595eb 100644 --- a/src/compiler/builder.ts +++ b/src/compiler/builder.ts @@ -372,6 +372,7 @@ namespace ts { BuilderState.updateSignaturesFromCache(state, state.currentAffectedFilesSignatures!); state.currentAffectedFilesSignatures!.clear(); BuilderState.updateExportedFilesMapFromCache(state, state.currentAffectedFilesExportedModulesMap); + state.currentAffectedFilesExportedModulesMap?.clear(); state.affectedFiles = undefined; } diff --git a/src/compiler/builderState.ts b/src/compiler/builderState.ts index 25b0db377c4..d78a107472c 100644 --- a/src/compiler/builderState.ts +++ b/src/compiler/builderState.ts @@ -48,11 +48,6 @@ namespace ts { */ readonly exportedModulesMap: BuilderState.ManyToManyPathMap | undefined; - previousCache?: { - id: number, - version: number, - }; - /** * true if file version is used as signature * This helps in delaying the calculation of the d.ts hash as version for the file till reasonable time @@ -86,7 +81,6 @@ namespace ts { } export interface ReadonlyManyToManyPathMap { - readonly id: number; clone(): ManyToManyPathMap; forEach(action: (v: ReadonlySet, k: Path) => void): void; getKeys(v: Path): ReadonlySet | undefined; @@ -103,18 +97,14 @@ namespace ts { } export interface ManyToManyPathMap extends ReadonlyManyToManyPathMap { - version(): number; // Incremented each time the contents are changed deleteKey(k: Path): boolean; set(k: Path, v: ReadonlySet): void; + clear(): void; } - let manyToManyPathMapCount = 0; export function createManyToManyPathMap(): ManyToManyPathMap { function create(forward: ESMap>, reverse: ESMap>, deleted: Set | undefined): ManyToManyPathMap { - let version = 0; const map: ManyToManyPathMap = { - id: manyToManyPathMapCount++, - version: () => version, clone: () => create(new Map(forward), new Map(reverse), deleted && new Set(deleted)), forEach: fn => forward.forEach(fn), getKeys: v => reverse.get(v), @@ -133,35 +123,33 @@ namespace ts { set.forEach(v => deleteFromMultimap(reverse, v, k)); forward.delete(k); - version++; return true; }, set: (k, vSet) => { - let changed = !!deleted?.delete(k); + deleted?.delete(k); const existingVSet = forward.get(k); forward.set(k, vSet); existingVSet?.forEach(v => { if (!vSet.has(v)) { - changed = true; deleteFromMultimap(reverse, v, k); } }); vSet.forEach(v => { if (!existingVSet?.has(v)) { - changed = true; addToMultimap(reverse, v, k); } }); - if (changed) { - version++; - } - return map; }, + clear: () => { + forward.clear(); + reverse.clear(); + deleted?.clear(); + } }; return map; @@ -179,11 +167,11 @@ namespace ts { set.add(v); } - function deleteFromMultimap(map: ESMap>, k: K, v: V, removeEmpty = true): boolean { + function deleteFromMultimap(map: ESMap>, k: K, v: V): boolean { const set = map.get(k); if (set?.delete(v)) { - if (removeEmpty && !set.size) { + if (!set.size) { map.delete(k); } return true; @@ -494,22 +482,6 @@ namespace ts { export function updateExportedFilesMapFromCache(state: BuilderState, exportedModulesMapCache: ManyToManyPathMap | undefined) { if (exportedModulesMapCache) { Debug.assert(!!state.exportedModulesMap); - - const cacheId = exportedModulesMapCache.id; - const cacheVersion = exportedModulesMapCache.version(); - if (state.previousCache) { - if (state.previousCache.id === cacheId && state.previousCache.version === cacheVersion) { - // If this is the same cache at the same version as last time this BuilderState - // was updated, there's no need to update again - return; - } - state.previousCache.id = cacheId; - state.previousCache.version = cacheVersion; - } - else { - state.previousCache = { id: cacheId, version: cacheVersion }; - } - exportedModulesMapCache.deletedKeys()?.forEach(path => state.exportedModulesMap!.deleteKey(path)); exportedModulesMapCache.forEach((exportedModules, path) => state.exportedModulesMap!.set(path, exportedModules)); }