1
Fork 0

Auto merge of #111913 - oli-obk:valtrees2, r=lcnr

Only rewrite valtree-constants to patterns and keep other constants opaque

Now that we can reliably fall back to comparing constants with `PartialEq::eq` to the match scrutinee, we can

1. eagerly try to convert constants to valtrees
2. then deeply convert the valtree to a pattern
3. if the to-valtree conversion failed, create an "opaque constant" pattern.

This PR specifically avoids any behavioral changes or major cleanups. What we can now do as follow ups is

* move the two remaining call sites to `destructure_mir_constant` off that query
* make valtree to pattern conversion infallible
    * this needs to be done after careful analysis of the effects. There may be user visible changes from that.

based on https://github.com/rust-lang/rust/pull/111768
This commit is contained in:
bors 2023-05-31 16:36:51 +00:00
commit 871b595202
21 changed files with 300 additions and 323 deletions

View file

@ -1288,7 +1288,7 @@ pub fn decode_expn_id(
decode_data: impl FnOnce(ExpnId) -> (ExpnData, ExpnHash),
) -> ExpnId {
if index == 0 {
debug!("decode_expn_id: deserialized root");
trace!("decode_expn_id: deserialized root");
return ExpnId::root();
}
@ -1321,7 +1321,7 @@ pub fn decode_syntax_context<D: Decoder, F: FnOnce(&mut D, u32) -> SyntaxContext
) -> SyntaxContext {
let raw_id: u32 = Decodable::decode(d);
if raw_id == 0 {
debug!("decode_syntax_context: deserialized root");
trace!("decode_syntax_context: deserialized root");
// The root is special
return SyntaxContext::root();
}