Skip to content

Commit 2f2b679

Browse files
authored
Optimize external source maps without full cache (microsoft#40130)
1 parent 55ca5e9 commit 2f2b679

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/compiler/emitter.ts

+19-1
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,8 @@ namespace ts {
862862
let sourceMapGenerator: SourceMapGenerator | undefined;
863863
let sourceMapSource: SourceMapSource;
864864
let sourceMapSourceIndex = -1;
865+
let mostRecentlyAddedSourceMapSource: SourceMapSource;
866+
let mostRecentlyAddedSourceMapSourceIndex = -1;
865867

866868
// Comments
867869
let containerPos = -1;
@@ -5337,9 +5339,10 @@ namespace ts {
53375339
function emitSourcePos(source: SourceMapSource, pos: number) {
53385340
if (source !== sourceMapSource) {
53395341
const savedSourceMapSource = sourceMapSource;
5342+
const savedSourceMapSourceIndex = sourceMapSourceIndex;
53405343
setSourceMapSource(source);
53415344
emitPos(pos);
5342-
setSourceMapSource(savedSourceMapSource);
5345+
resetSourceMapSource(savedSourceMapSource, savedSourceMapSourceIndex);
53435346
}
53445347
else {
53455348
emitPos(pos);
@@ -5386,6 +5389,13 @@ namespace ts {
53865389

53875390
sourceMapSource = source;
53885391

5392+
if (source === mostRecentlyAddedSourceMapSource) {
5393+
// Fast path for when the new source map is the most recently added, in which case
5394+
// we use its captured index without going through the source map generator.
5395+
sourceMapSourceIndex = mostRecentlyAddedSourceMapSourceIndex;
5396+
return;
5397+
}
5398+
53895399
if (isJsonSourceMapSource(source)) {
53905400
return;
53915401
}
@@ -5394,6 +5404,14 @@ namespace ts {
53945404
if (printerOptions.inlineSources) {
53955405
sourceMapGenerator!.setSourceContent(sourceMapSourceIndex, source.text);
53965406
}
5407+
5408+
mostRecentlyAddedSourceMapSource = source;
5409+
mostRecentlyAddedSourceMapSourceIndex = sourceMapSourceIndex;
5410+
}
5411+
5412+
function resetSourceMapSource(source: SourceMapSource, sourceIndex: number) {
5413+
sourceMapSource = source;
5414+
sourceMapSourceIndex = sourceIndex;
53975415
}
53985416

53995417
function isJsonSourceMapSource(sourceFile: SourceMapSource) {

0 commit comments

Comments
 (0)