Regression in pattern matching optional fields. #7440
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.
Fixes #7400
Fix regression in pattern matching for optional fields.
There's an optimisation where
{field: VariantCase}
is compiled tofield:VariantCase
instead offield:Some(VariantCase)
to avoid generating code that handles undefined, sinceVariantCase
is going to be a string. However, that optimisation happens early in the pattern matching compiler, and can end up interfering with other cases. For example, whenVariantCase
is the only case in a variant, and the following case is_
, the compiler is induced in thinking that the variant case covers all cases, and the case for_
is never generated. Similar behaviour happens when handling the last case of a variant followed by_
.