Skip to content

Commit dca2972

Browse files
committed
Track a fixed number of most-expensive statements
1 parent 2fb0436 commit dca2972

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
@@ -317,6 +317,16 @@ namespace ts {
317317
let constraintDepth = 0;
318318
let currentNode: Node | undefined;
319319

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

@@ -35619,7 +35629,39 @@ namespace ts {
3561935629
const saveCurrentNode = currentNode;
3562035630
currentNode = node;
3562135631
instantiationCount = 0;
35632+
35633+
const oldTypeCount = typeCount;
35634+
const oldSymbolCount = symbolCount;
35635+
3562235636
checkSourceElementWorker(node);
35637+
35638+
if (node.kind >= SyntaxKind.FirstStatement && node.kind <= SyntaxKind.LastStatement) {
35639+
if (ignoreExpensiveStatement) {
35640+
// The first statement is unfairly blamed for a lot of lib types
35641+
ignoreExpensiveStatement = false;
35642+
}
35643+
else {
35644+
const typeDelta = typeCount - oldTypeCount;
35645+
const symbolDelta = symbolCount - oldSymbolCount;
35646+
const record = { node, typeDelta, symbolDelta };
35647+
35648+
let i = 0;
35649+
for (const record of expensiveStatements) {
35650+
if (record.typeDelta < typeDelta) {
35651+
break;
35652+
}
35653+
i++;
35654+
}
35655+
35656+
if (i < maxExpensiveStatementCount) {
35657+
expensiveStatements.splice(i, 0, record);
35658+
if (expensiveStatements.length > maxExpensiveStatementCount) {
35659+
expensiveStatements.pop();
35660+
}
35661+
}
35662+
}
35663+
}
35664+
3562335665
currentNode = saveCurrentNode;
3562435666
}
3562535667
}

0 commit comments

Comments
 (0)