Avoid unnecessary work when checking deferred functions#20860
Open
ilevkivskyi wants to merge 3 commits intopython:masterfrom
Open
Avoid unnecessary work when checking deferred functions#20860ilevkivskyi wants to merge 3 commits intopython:masterfrom
ilevkivskyi wants to merge 3 commits intopython:masterfrom
Conversation
This comment has been minimized.
This comment has been minimized.
Contributor
|
According to mypy_primer, this change doesn't affect type check results on a corpus of open source code. ✅ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
As I was looking more I noticed that we widen the inferred types during redefinition even if current function is deferred. It turned out that this doesn't seem to have any user visible effect (mostly because
set_inferred_type()already guards against this). But we still do a bunch of pointless work (like few extra calls tomake_simplified_union()per assignment), so we should bail out early.But then I thought why do we even continuing to type-check the current function if:
ExpressionChecker.accept()returnsAnyfor every expressionIf all tests pass, and there is nothing in primer, I think we should stop type-checking soon after deferral, as this will probably save ~1-2% of time (maybe more for code bases with many import cycles etc).
Added test already passes on master, I added it to avoid regressions as I didn't find any similar tests for
--allow-redefinition-new.