(kind, _a)
| 120760 | } |
| 120761 | ts.getBuilderCreationParameters = getBuilderCreationParameters; |
| 120762 | function createBuilderProgram(kind, _a) { |
| 120763 | var newProgram = _a.newProgram, host = _a.host, oldProgram = _a.oldProgram, configFileParsingDiagnostics = _a.configFileParsingDiagnostics; |
| 120764 | // Return same program if underlying program doesnt change |
| 120765 | var oldState = oldProgram && oldProgram.getState(); |
| 120766 | if (oldState && newProgram === oldState.program && configFileParsingDiagnostics === newProgram.getConfigFileParsingDiagnostics()) { |
| 120767 | newProgram = undefined; // TODO: GH#18217 |
| 120768 | oldState = undefined; |
| 120769 | return oldProgram; |
| 120770 | } |
| 120771 | /** |
| 120772 | * Create the canonical file name for identity |
| 120773 | */ |
| 120774 | var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames()); |
| 120775 | /** |
| 120776 | * Computing hash to for signature verification |
| 120777 | */ |
| 120778 | var computeHash = ts.maybeBind(host, host.createHash); |
| 120779 | var state = createBuilderProgramState(newProgram, getCanonicalFileName, oldState, host.disableUseFileVersionAsSignature); |
| 120780 | var backupState; |
| 120781 | newProgram.getProgramBuildInfo = function () { return getProgramBuildInfo(state, getCanonicalFileName); }; |
| 120782 | // To ensure that we arent storing any references to old program or new program without state |
| 120783 | newProgram = undefined; // TODO: GH#18217 |
| 120784 | oldProgram = undefined; |
| 120785 | oldState = undefined; |
| 120786 | var getState = function () { return state; }; |
| 120787 | var builderProgram = createRedirectedBuilderProgram(getState, configFileParsingDiagnostics); |
| 120788 | builderProgram.getState = getState; |
| 120789 | builderProgram.backupState = function () { |
| 120790 | ts.Debug.assert(backupState === undefined); |
| 120791 | backupState = cloneBuilderProgramState(state); |
| 120792 | }; |
| 120793 | builderProgram.restoreState = function () { |
| 120794 | state = ts.Debug.checkDefined(backupState); |
| 120795 | backupState = undefined; |
| 120796 | }; |
| 120797 | builderProgram.getAllDependencies = function (sourceFile) { return ts.BuilderState.getAllDependencies(state, ts.Debug.checkDefined(state.program), sourceFile); }; |
| 120798 | builderProgram.getSemanticDiagnostics = getSemanticDiagnostics; |
| 120799 | builderProgram.emit = emit; |
| 120800 | builderProgram.releaseProgram = function () { |
| 120801 | releaseCache(state); |
| 120802 | backupState = undefined; |
| 120803 | }; |
| 120804 | if (kind === BuilderProgramKind.SemanticDiagnosticsBuilderProgram) { |
| 120805 | builderProgram.getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile; |
| 120806 | } |
| 120807 | else if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) { |
| 120808 | builderProgram.getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile; |
| 120809 | builderProgram.emitNextAffectedFile = emitNextAffectedFile; |
| 120810 | builderProgram.emitBuildInfo = emitBuildInfo; |
| 120811 | } |
| 120812 | else { |
| 120813 | ts.notImplemented(); |
| 120814 | } |
| 120815 | return builderProgram; |
| 120816 | function emitBuildInfo(writeFile, cancellationToken) { |
| 120817 | if (state.buildInfoEmitPending) { |
| 120818 | var result = ts.Debug.checkDefined(state.program).emitBuildInfo(writeFile || ts.maybeBind(host, host.writeFile), cancellationToken); |
| 120819 | state.buildInfoEmitPending = false; |
nothing calls this directly
no test coverage detected
searching dependent graphs…