mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-06 01:39:28 -06:00
Skip markLinkedReferences import elision walk entirely in some common cases (#59398)
This commit is contained in:
parent
c8a7d589e6
commit
e0701af46e
@ -49271,11 +49271,14 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
|
||||
function checkSingleIdentifier(node: Node) {
|
||||
const nodeLinks = getNodeLinks(node);
|
||||
nodeLinks.calculatedFlags |= NodeCheckFlags.ConstructorReference | NodeCheckFlags.CapturedBlockScopedBinding | NodeCheckFlags.BlockScopedBindingInLoop;
|
||||
if (isIdentifier(node) && isExpressionNodeOrShorthandPropertyAssignmentName(node) && !(isPropertyAccessExpression(node.parent) && node.parent.name === node)) {
|
||||
const s = getResolvedSymbol(node);
|
||||
if (s && s !== unknownSymbol) {
|
||||
checkIdentifierCalculateNodeCheckFlags(node, s);
|
||||
nodeLinks.calculatedFlags |= NodeCheckFlags.ConstructorReference;
|
||||
if (isIdentifier(node)) {
|
||||
nodeLinks.calculatedFlags |= NodeCheckFlags.BlockScopedBindingInLoop | NodeCheckFlags.CapturedBlockScopedBinding; // Can't set on all arbitrary nodes (these nodes have this flag set by `checkSingleBlockScopeBinding` only)
|
||||
if (isExpressionNodeOrShorthandPropertyAssignmentName(node) && !(isPropertyAccessExpression(node.parent) && node.parent.name === node)) {
|
||||
const s = getResolvedSymbol(node);
|
||||
if (s && s !== unknownSymbol) {
|
||||
checkIdentifierCalculateNodeCheckFlags(node, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -947,6 +947,7 @@ export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFi
|
||||
}
|
||||
|
||||
function markLinkedReferences(file: SourceFile) {
|
||||
if (ts.isSourceFileJS(file)) return; // JS files don't use reference calculations as they don't do import ellision, no need to calculate it
|
||||
ts.forEachChildRecursively(file, n => {
|
||||
if (isImportEqualsDeclaration(n) && !(ts.getSyntacticModifierFlags(n) & ts.ModifierFlags.Export)) return "skip"; // These are deferred and marked in a chain when referenced
|
||||
if (ts.isImportDeclaration(n)) return "skip"; // likewise, these are ultimately what get marked by calls on other nodes - we want to skip them
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user