chore: refactor

This commit is contained in:
daiwei 2024-10-23 11:17:13 +08:00
parent 39d34416cf
commit 54f1269ae3
1 changed files with 34 additions and 34 deletions

View File

@ -61,42 +61,31 @@ export function walkIdentifiers(
) { ) {
// mark property in destructure pattern // mark property in destructure pattern
;(node as any).inPattern = true ;(node as any).inPattern = true
} else if (isFunctionType(node)) { } else if (isFunctionType(node) && !reuseScopeIds(node, knownIds)) {
if (node.scopeIds) {
node.scopeIds.forEach(id => markKnownIds(id, knownIds))
} else {
// walk function expressions and add its arguments to known identifiers // walk function expressions and add its arguments to known identifiers
// so that we don't prefix them // so that we don't prefix them
walkFunctionParams(node, id => walkFunctionParams(node, id => markScopeIdentifier(node, id, knownIds))
markScopeIdentifier(node, id, knownIds), } else if (
) node.type === 'BlockStatement' &&
} !reuseScopeIds(node, knownIds)
} else if (node.type === 'BlockStatement') { ) {
if (node.scopeIds) {
node.scopeIds.forEach(id => markKnownIds(id, knownIds))
} else {
// #3445 record block-level local variables // #3445 record block-level local variables
walkBlockDeclarations(node, id => walkBlockDeclarations(node, id =>
markScopeIdentifier(node, id, knownIds), markScopeIdentifier(node, id, knownIds),
) )
} } else if (
} else if (node.type === 'CatchClause' && node.param) { node.type === 'CatchClause' &&
if (node.scopeIds) { node.param &&
node.scopeIds.forEach(id => markKnownIds(id, knownIds)) !reuseScopeIds(node, knownIds)
} else { ) {
for (const id of extractIdentifiers(node.param)) { for (const id of extractIdentifiers(node.param)) {
markScopeIdentifier(node, id, knownIds) markScopeIdentifier(node, id, knownIds)
} }
} } else if (isForStatement(node) && !reuseScopeIds(node, knownIds)) {
} else if (isForStatement(node)) {
if (node.scopeIds) {
node.scopeIds.forEach(id => markKnownIds(id, knownIds))
} else {
walkForStatement(node, false, id => walkForStatement(node, false, id =>
markScopeIdentifier(node, id, knownIds), markScopeIdentifier(node, id, knownIds),
) )
} }
}
}, },
leave(node: Node & { scopeIds?: Set<string> }, parent: Node | null) { leave(node: Node & { scopeIds?: Set<string> }, parent: Node | null) {
parent && parentStack.pop() parent && parentStack.pop()
@ -112,6 +101,17 @@ export function walkIdentifiers(
}) })
} }
function reuseScopeIds(
node: Node & { scopeIds?: Set<string> },
knownIds: Record<string, number>,
): boolean {
if (node.scopeIds) {
node.scopeIds.forEach(id => markKnownIds(id, knownIds))
return true
}
return false
}
export function isReferencedIdentifier( export function isReferencedIdentifier(
id: Identifier, id: Identifier,
parent: Node | null, parent: Node | null,