@@ -79,7 +79,7 @@ struct TopInfo<'tcx> {
79
79
80
80
#[ derive( Copy , Clone ) ]
81
81
struct PatInfo < ' tcx , ' a > {
82
- binding_mode : BindingAnnotation ,
82
+ binding_mode : ByRef ,
83
83
max_ref_mutbl : Mutability ,
84
84
top_info : TopInfo < ' tcx > ,
85
85
decl_origin : Option < DeclOrigin < ' a > > ,
@@ -125,8 +125,6 @@ impl<'tcx> FnCtxt<'_, 'tcx> {
125
125
}
126
126
}
127
127
128
- const INITIAL_BM : BindingAnnotation = BindingAnnotation ( ByRef :: No , Mutability :: Not ) ;
129
-
130
128
/// Mode for adjusting the expected type and binding mode.
131
129
enum AdjustMode {
132
130
/// Peel off all immediate reference types.
@@ -163,7 +161,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
163
161
) {
164
162
let info = TopInfo { expected, origin_expr, span } ;
165
163
let pat_info = PatInfo {
166
- binding_mode : INITIAL_BM ,
164
+ binding_mode : ByRef :: No ,
167
165
max_ref_mutbl : Mutability :: Mut ,
168
166
top_info : info,
169
167
decl_origin,
@@ -296,43 +294,43 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
296
294
& self ,
297
295
pat : & ' tcx Pat < ' tcx > ,
298
296
expected : Ty < ' tcx > ,
299
- def_bm : BindingAnnotation ,
297
+ def_br : ByRef ,
300
298
adjust_mode : AdjustMode ,
301
299
max_ref_mutbl : Mutability ,
302
- ) -> ( Ty < ' tcx > , BindingAnnotation , Mutability , bool ) {
303
- if let ByRef :: Yes ( mutbl) = def_bm . 0 {
300
+ ) -> ( Ty < ' tcx > , ByRef , Mutability , bool ) {
301
+ if let ByRef :: Yes ( mutbl) = def_br {
304
302
debug_assert ! ( mutbl <= max_ref_mutbl) ;
305
303
}
306
304
match adjust_mode {
307
- AdjustMode :: Pass => ( expected, def_bm , max_ref_mutbl, false ) ,
308
- AdjustMode :: Reset => ( expected, INITIAL_BM , Mutability :: Mut , false ) ,
305
+ AdjustMode :: Pass => ( expected, def_br , max_ref_mutbl, false ) ,
306
+ AdjustMode :: Reset => ( expected, ByRef :: No , Mutability :: Mut , false ) ,
309
307
AdjustMode :: ResetAndConsumeRef ( ref_pat_mutbl) => {
310
- let mutbls_match = def_bm . 0 == ByRef :: Yes ( ref_pat_mutbl) ;
308
+ let mutbls_match = def_br == ByRef :: Yes ( ref_pat_mutbl) ;
311
309
if pat. span . at_least_rust_2024 ( ) && self . tcx . features ( ) . ref_pat_eat_one_layer_2024 {
312
310
if mutbls_match {
313
311
debug ! ( "consuming inherited reference" ) ;
314
- ( expected, INITIAL_BM , cmp:: min ( max_ref_mutbl, ref_pat_mutbl) , true )
312
+ ( expected, ByRef :: No , cmp:: min ( max_ref_mutbl, ref_pat_mutbl) , true )
315
313
} else {
316
314
let ( new_ty, new_bm, max_ref_mutbl) = if ref_pat_mutbl == Mutability :: Mut {
317
315
self . peel_off_references (
318
316
pat,
319
317
expected,
320
- def_bm ,
318
+ def_br ,
321
319
Mutability :: Not ,
322
320
max_ref_mutbl,
323
321
)
324
322
} else {
325
- ( expected, def_bm . cap_ref_mutability ( Mutability :: Not ) , Mutability :: Not )
323
+ ( expected, def_br . cap_ref_mutability ( Mutability :: Not ) , Mutability :: Not )
326
324
} ;
327
325
( new_ty, new_bm, max_ref_mutbl, false )
328
326
}
329
327
} else {
330
- ( expected, INITIAL_BM , max_ref_mutbl, mutbls_match)
328
+ ( expected, ByRef :: No , max_ref_mutbl, mutbls_match)
331
329
}
332
330
}
333
331
AdjustMode :: Peel => {
334
332
let peeled =
335
- self . peel_off_references ( pat, expected, def_bm , Mutability :: Mut , max_ref_mutbl) ;
333
+ self . peel_off_references ( pat, expected, def_br , Mutability :: Mut , max_ref_mutbl) ;
336
334
( peeled. 0 , peeled. 1 , peeled. 2 , false )
337
335
}
338
336
}
@@ -413,10 +411,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
413
411
& self ,
414
412
pat : & ' tcx Pat < ' tcx > ,
415
413
expected : Ty < ' tcx > ,
416
- mut def_bm : BindingAnnotation ,
414
+ mut def_br : ByRef ,
417
415
max_peelable_mutability : Mutability ,
418
416
mut max_ref_mutability : Mutability ,
419
- ) -> ( Ty < ' tcx > , BindingAnnotation , Mutability ) {
417
+ ) -> ( Ty < ' tcx > , ByRef , Mutability ) {
420
418
let mut expected = self . try_structurally_resolve_type ( pat. span , expected) ;
421
419
// Peel off as many `&` or `&mut` from the scrutinee type as possible. For example,
422
420
// for `match &&&mut Some(5)` the loop runs three times, aborting when it reaches
@@ -437,7 +435,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
437
435
pat_adjustments. push ( expected) ;
438
436
439
437
expected = self . try_structurally_resolve_type ( pat. span , inner_ty) ;
440
- def_bm . 0 = ByRef :: Yes ( match def_bm . 0 {
438
+ def_br = ByRef :: Yes ( match def_br {
441
439
// If default binding mode is by value, make it `ref` or `ref mut`
442
440
// (depending on whether we observe `&` or `&mut`).
443
441
ByRef :: No |
@@ -450,21 +448,21 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
450
448
}
451
449
452
450
if pat. span . at_least_rust_2024 ( ) && self . tcx . features ( ) . ref_pat_eat_one_layer_2024 {
453
- def_bm = def_bm . cap_ref_mutability ( max_ref_mutability) ;
454
- if def_bm . 0 == ByRef :: Yes ( Mutability :: Not ) {
451
+ def_br = def_br . cap_ref_mutability ( max_ref_mutability) ;
452
+ if def_br == ByRef :: Yes ( Mutability :: Not ) {
455
453
max_ref_mutability = Mutability :: Not ;
456
454
}
457
455
}
458
456
459
457
if !pat_adjustments. is_empty ( ) {
460
- debug ! ( "default binding mode is now {:?}" , def_bm ) ;
458
+ debug ! ( "default binding mode is now {:?}" , def_br ) ;
461
459
self . typeck_results
462
460
. borrow_mut ( )
463
461
. pat_adjustments_mut ( )
464
462
. insert ( pat. hir_id , pat_adjustments) ;
465
463
}
466
464
467
- ( expected, def_bm , max_ref_mutability)
465
+ ( expected, def_br , max_ref_mutability)
468
466
}
469
467
470
468
fn check_pat_lit (
@@ -675,7 +673,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
675
673
expected : Ty < ' tcx > ,
676
674
pat_info : PatInfo < ' tcx , ' _ > ,
677
675
) -> Ty < ' tcx > {
678
- let PatInfo { binding_mode : BindingAnnotation ( def_br, _ ) , top_info : ti, .. } = pat_info;
676
+ let PatInfo { binding_mode : def_br, top_info : ti, .. } = pat_info;
679
677
680
678
// Determine the binding mode...
681
679
let bm = match ba {
0 commit comments