Skip to content

gh-153568: Stop re-walking memo lists when growing left-recursive rules#153574

Open
pablogsal wants to merge 1 commit into
python:mainfrom
pablogsal:gh-153568-leftrec-memo
Open

gh-153568: Stop re-walking memo lists when growing left-recursive rules#153574
pablogsal wants to merge 1 commit into
python:mainfrom
pablogsal:gh-153568-leftrec-memo

Conversation

@pablogsal

@pablogsal pablogsal commented Jul 11, 2026

Copy link
Copy Markdown
Member

The grow-the-seed loop of every left-recursive rule searched the token's memo list on each iteration to update its own entry, even though it inserted that entry itself on the first pass. Keeping a direct reference and writing through it removes the repeated walks.

Benchmark (parsing 8 of the largest stdlib files, 1.3 MB, 20 times per run with _PyParser_ASTFromString — parser only, no AST-to-Python conversion; pyperf, interleaved runs):

build time per run speedup
main 1.74 s ± 0.03
this PR 1.73 s ± 0.03 within noise

On its own the effect is below measurement noise; combined with the memo filter of #153571 it measured about 3% because the remaining walks there are the long ones this change removes.

…ve rules

The left-recursion driver now keeps a direct reference to its memo
entry and updates it in place on every iteration.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant