Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ply: Make generated lextab.py deterministic #531

Merged
merged 1 commit into from
Mar 30, 2024
Merged

ply: Make generated lextab.py deterministic #531

merged 1 commit into from
Mar 30, 2024

Conversation

jackrosenthal
Copy link
Contributor

Set ordering is non-deterministic, and thus, this serializes the generated _lextokens in random order. Adding a sorted(...) here fixes that.

Keeping the generated code deterministic comes with benefits: for hermetic build systems like Bazel which check the hashes of inputs/outputs, we can know when we don't need to rebuild code that depends on pycparser, and get better cache hits.

Note that _lextokens does not exist in upstream ply, so I patched it here directly. If/when pycparser uprevs to a newer ply, this won't matter anymore.

Set ordering is non-deterministic, and thus, this serializes the
generated _lextokens in random order.  Adding a sorted(...) here fixes
that.

Keeping the generated code deterministic comes with benefits: for
hermetic build systems like Bazel which check the hashes of
inputs/outputs, we can know when we don't need to rebuild code that
depends on pycparser, and get better cache hits.

Note that _lextokens does not exist in upstream ply, so I patched it
here directly.  If/when pycparser uprevs to a newer ply, this won't
matter anymore.
@eliben eliben merged commit c500fb6 into eliben:main Mar 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants