Remove ordering restrictions in control flow analysis #37134
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.
In #36114 we removed ordering restrictions related to discriminant checks in control flow analysis. With this PR we remove all such remaining restrictions, specifically those related to
instanceof
,typeof
, and user defined type predicate checks.A bit of history... In #10028 we introduced logic that would reset control flow analysis types following discriminant and
instanceof
checks. For example, followingobj instanceof Foo
we'd reset all control flow types for properties ofobj
, effectively forgetting about any narrowing operations that occurred before theinstanceof
check. This resetting logic was needed to work around issues related to control flow analysis in loops, but wasn't otherwise justified. In fact, the motivating examples all worked just fine outside of loops. It wasn't until #35332 that we finally fixed the underlying issue (for other reasons), and there is no reason to have these restrictions anymore.Fixes #36709.