Python: Add tests for reachability when using nonlocal
.
#2074
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.
Variables marked as
nonlocal
can give rise to false negatives for reachability when they are mutated in a different scope. Thus, a variable that is set toFalse
, and where a local function (with said variablenonlocal
mutates it to beTrue
, is considered to beFalse
throughout, and in particular this may lead the extrator to prune theTrue
branch of anif
-statement depending on this variable.On an internal PR, I propose that we do not prune these edges when the variable is also mentioned in a
nonlocal
statement. This will inevitably lead to some false negatives, and I have added tests to this effect.I expect these tests to fail until we've merged the internal PR. (But once this is done, we can re-run the tests, and they should then go through. I have of course verified that they work locally.)