perf: convert _walk_js_tree from recursive generator to iterative

Eliminates O(depth) generator-frame chain overhead. Each leaf's value previously propagated through 26+ yield-from frames; now a single stack loop handles the full traversal.
This commit is contained in:
Sir Phillip Tubell
2026-06-12 15:19:44 -04:00
parent 137bc2d951
commit a7c69808ac
+8 -3
View File
@@ -7189,9 +7189,14 @@ def _parse_js_tree(path: Path):
def _walk_js_tree(node):
yield node
for child in node.children:
yield from _walk_js_tree(child)
# Iterative DFS avoids Python's O(depth) generator-chain overhead.
# Recursive yield-from creates one generator frame per level — at 26+
# levels deep each leaf's value had to propagate through 26 frames.
stack = [node]
while stack:
n = stack.pop()
yield n
stack.extend(reversed(n.children))
def _js_module_specifier(node, source: bytes) -> str | None: