Skip to content

Commit 8d2511a

Browse files
committed
Track a fixed number of most-expensive statements
1 parent 463f8e1 commit 8d2511a

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

src/compiler/checker.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,16 @@ namespace ts {
315315
let constraintDepth = 0;
316316
let currentNode: Node | undefined;
317317

318+
interface ExpensiveStatement {
319+
node: Node;
320+
typeDelta: number;
321+
symbolDelta: number;
322+
}
323+
324+
let ignoreExpensiveStatement = true;
325+
const maxExpensiveStatementCount = 5;
326+
const expensiveStatements: ExpensiveStatement[] = [];
327+
318328
const emptySymbols = createSymbolTable();
319329
const arrayVariances = [VarianceFlags.Covariant];
320330

@@ -34863,7 +34873,39 @@ namespace ts {
3486334873
const saveCurrentNode = currentNode;
3486434874
currentNode = node;
3486534875
instantiationCount = 0;
34876+
34877+
const oldTypeCount = typeCount;
34878+
const oldSymbolCount = symbolCount;
34879+
3486634880
checkSourceElementWorker(node);
34881+
34882+
if (node.kind >= SyntaxKind.FirstStatement && node.kind <= SyntaxKind.LastStatement) {
34883+
if (ignoreExpensiveStatement) {
34884+
// The first statement is unfairly blamed for a lot of lib types
34885+
ignoreExpensiveStatement = false;
34886+
}
34887+
else {
34888+
const typeDelta = typeCount - oldTypeCount;
34889+
const symbolDelta = symbolCount - oldSymbolCount;
34890+
const record = { node, typeDelta, symbolDelta };
34891+
34892+
let i = 0;
34893+
for (const record of expensiveStatements) {
34894+
if (record.typeDelta < typeDelta) {
34895+
break;
34896+
}
34897+
i++;
34898+
}
34899+
34900+
if (i < maxExpensiveStatementCount) {
34901+
expensiveStatements.splice(i, 0, record);
34902+
if (expensiveStatements.length > maxExpensiveStatementCount) {
34903+
expensiveStatements.pop();
34904+
}
34905+
}
34906+
}
34907+
}
34908+
3486734909
currentNode = saveCurrentNode;
3486834910
}
3486934911
}

0 commit comments

Comments
 (0)