fix[tool]: update VarAccess pickle implementation #4270
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What I did
fix a bug where unpickling
annotated_vyper_module
would lead to a crash:a repro can be found at charles-cooper@2a5facf.
this is a blocker for tooling, for instance titanoboa relies on pickle/unpickle to cache CompilerData objects:
https:/vyperlang/titanoboa/blob/86df8936654db20686410488738d7abaf165a4c9/boa/util/disk_cache.py#L65-L66
the underlying issue is that
pickle.loads()
callsobj.__hash__()
for objects that are keys in a hashed data structure - namely, dicts, sets and frozensets. this causes a crash when there is a cycle in the object graph, because the object is not fully instantiated at the time that__hash__()
is called. this is a cpython bug, reported at python/cpython#124937.@serhiy-storchaka suggested the approach taken in this PR, which breaks the loop before pickling: python/cpython#124937 (comment).
How I did it
How to verify it
Commit message
Description for the changelog
Cute Animal Picture