Skip to content

Commit 54fbeb5

Browse files
authored
Use correct state when getting it from redirected program (#44275)
Eg. program can backup and restore state changing the state object and we want to release program on the correct one This ensure program is released correctly when there are declaration emit errors during tsc --build
1 parent 3e29397 commit 54fbeb5

File tree

6 files changed

+13
-12
lines changed

6 files changed

+13
-12
lines changed

src/compiler/builder.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -976,8 +976,9 @@ namespace ts {
976976
oldProgram = undefined;
977977
oldState = undefined;
978978

979-
const builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics);
980-
builderProgram.getState = () => state;
979+
const getState = () => state;
980+
const builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics);
981+
builderProgram.getState = getState;
981982
builderProgram.backupState = () => {
982983
Debug.assert(backupState === undefined);
983984
backupState = cloneBuilderProgramState(state);
@@ -1306,15 +1307,15 @@ namespace ts {
13061307
}
13071308
}
13081309

1309-
export function createRedirectedBuilderProgram(state: { program: Program | undefined; compilerOptions: CompilerOptions; }, configFileParsingDiagnostics: readonly Diagnostic[]): BuilderProgram {
1310+
export function createRedirectedBuilderProgram(getState: () => { program: Program | undefined; compilerOptions: CompilerOptions; }, configFileParsingDiagnostics: readonly Diagnostic[]): BuilderProgram {
13101311
return {
13111312
getState: notImplemented,
13121313
backupState: noop,
13131314
restoreState: noop,
13141315
getProgram,
1315-
getProgramOrUndefined: () => state.program,
1316-
releaseProgram: () => state.program = undefined,
1317-
getCompilerOptions: () => state.compilerOptions,
1316+
getProgramOrUndefined: () => getState().program,
1317+
releaseProgram: () => getState().program = undefined,
1318+
getCompilerOptions: () => getState().compilerOptions,
13181319
getSourceFile: fileName => getProgram().getSourceFile(fileName),
13191320
getSourceFiles: () => getProgram().getSourceFiles(),
13201321
getOptionsDiagnostics: cancellationToken => getProgram().getOptionsDiagnostics(cancellationToken),
@@ -1331,7 +1332,7 @@ namespace ts {
13311332
};
13321333

13331334
function getProgram() {
1334-
return Debug.checkDefined(state.program);
1335+
return Debug.checkDefined(getState().program);
13351336
}
13361337
}
13371338
}

src/compiler/builderPublic.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,6 @@ namespace ts {
164164
export function createAbstractBuilder(rootNames: readonly string[] | undefined, options: CompilerOptions | undefined, host?: CompilerHost, oldProgram?: BuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[], projectReferences?: readonly ProjectReference[]): BuilderProgram;
165165
export function createAbstractBuilder(newProgramOrRootNames: Program | readonly string[] | undefined, hostOrOptions: BuilderProgramHost | CompilerOptions | undefined, oldProgramOrHost?: CompilerHost | BuilderProgram, configFileParsingDiagnosticsOrOldProgram?: readonly Diagnostic[] | BuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[], projectReferences?: readonly ProjectReference[]): BuilderProgram {
166166
const { newProgram, configFileParsingDiagnostics: newConfigFileParsingDiagnostics } = getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences);
167-
return createRedirectedBuilderProgram({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, newConfigFileParsingDiagnostics);
167+
return createRedirectedBuilderProgram(() => ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }), newConfigFileParsingDiagnostics);
168168
}
169169
}

tests/baselines/reference/tsbuild/watchMode/programUpdates/reportErrors/declarationEmitErrors/introduceError/when-file-with-no-error-changes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ Output::
215215

216216
Program root files: ["/user/username/projects/solution/app/fileWithError.ts","/user/username/projects/solution/app/fileWithoutError.ts"]
217217
Program options: {"composite":true,"watch":true,"configFilePath":"/user/username/projects/solution/app/tsconfig.json"}
218-
Program structureReused: Completely
218+
Program structureReused: Not
219219
Program files::
220220
/a/lib/lib.d.ts
221221
/user/username/projects/solution/app/fileWithError.ts

tests/baselines/reference/tsbuild/watchMode/programUpdates/reportErrors/declarationEmitErrors/introduceError/when-fixing-errors-only-changed-file-is-emitted.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ Output::
213213

214214
Program root files: ["/user/username/projects/solution/app/fileWithError.ts","/user/username/projects/solution/app/fileWithoutError.ts"]
215215
Program options: {"composite":true,"watch":true,"configFilePath":"/user/username/projects/solution/app/tsconfig.json"}
216-
Program structureReused: Completely
216+
Program structureReused: Not
217217
Program files::
218218
/a/lib/lib.d.ts
219219
/user/username/projects/solution/app/fileWithError.ts

tests/baselines/reference/tsbuild/watchMode/programUpdates/reportErrors/declarationEmitErrors/when-file-with-no-error-changes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ Output::
9191

9292
Program root files: ["/user/username/projects/solution/app/fileWithError.ts","/user/username/projects/solution/app/fileWithoutError.ts"]
9393
Program options: {"composite":true,"watch":true,"configFilePath":"/user/username/projects/solution/app/tsconfig.json"}
94-
Program structureReused: Completely
94+
Program structureReused: Not
9595
Program files::
9696
/a/lib/lib.d.ts
9797
/user/username/projects/solution/app/fileWithError.ts

tests/baselines/reference/tsbuild/watchMode/programUpdates/reportErrors/declarationEmitErrors/when-fixing-error-files-all-files-are-emitted.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ Output::
8989

9090
Program root files: ["/user/username/projects/solution/app/fileWithError.ts","/user/username/projects/solution/app/fileWithoutError.ts"]
9191
Program options: {"composite":true,"watch":true,"configFilePath":"/user/username/projects/solution/app/tsconfig.json"}
92-
Program structureReused: Completely
92+
Program structureReused: Not
9393
Program files::
9494
/a/lib/lib.d.ts
9595
/user/username/projects/solution/app/fileWithError.ts

0 commit comments

Comments
 (0)