@@ -79,7 +79,7 @@ struct TopInfo<'tcx> {
7979
8080#[ derive( Copy , Clone ) ]
8181struct PatInfo < ' tcx , ' a > {
82- binding_mode : BindingAnnotation ,
82+ binding_mode : ByRef ,
8383max_ref_mutbl : Mutability ,
8484top_info : TopInfo < ' tcx > ,
8585decl_origin : Option < DeclOrigin < ' a > > ,
@@ -125,8 +125,6 @@ impl<'tcx> FnCtxt<'_, 'tcx> {
125125}
126126}
127127
128- const INITIAL_BM : BindingAnnotation = BindingAnnotation ( ByRef :: No , Mutability :: Not ) ;
129-
130128/// Mode for adjusting the expected type and binding mode.
131129enum AdjustMode {
132130/// Peel off all immediate reference types.
@@ -163,7 +161,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
163161) {
164162let info = TopInfo { expected, origin_expr, span } ;
165163let pat_info = PatInfo {
166- binding_mode : INITIAL_BM ,
164+ binding_mode : ByRef :: No ,
167165max_ref_mutbl : Mutability :: Mut ,
168166top_info : info,
169167 decl_origin,
@@ -296,43 +294,43 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
296294& self ,
297295pat : & ' tcx Pat < ' tcx > ,
298296expected : Ty < ' tcx > ,
299- def_bm : BindingAnnotation ,
297+ def_br : ByRef ,
300298adjust_mode : AdjustMode ,
301299max_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 {
304302debug_assert ! ( mutbl <= max_ref_mutbl) ;
305303}
306304match 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 ) ,
309307AdjustMode :: 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) ;
311309if pat. span . at_least_rust_2024 ( ) && self . tcx . features ( ) . ref_pat_eat_one_layer_2024 {
312310if mutbls_match {
313311debug ! ( "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 )
315313} else {
316314let ( new_ty, new_bm, max_ref_mutbl) = if ref_pat_mutbl == Mutability :: Mut {
317315self . peel_off_references (
318316 pat,
319317 expected,
320- def_bm ,
318+ def_br ,
321319Mutability :: Not ,
322320 max_ref_mutbl,
323321)
324322} else {
325- ( expected, def_bm . cap_ref_mutability ( Mutability :: Not ) , Mutability :: Not )
323+ ( expected, def_br . cap_ref_mutability ( Mutability :: Not ) , Mutability :: Not )
326324} ;
327325( new_ty, new_bm, max_ref_mutbl, false )
328326}
329327} else {
330- ( expected, INITIAL_BM , max_ref_mutbl, mutbls_match)
328+ ( expected, ByRef :: No , max_ref_mutbl, mutbls_match)
331329}
332330}
333331AdjustMode :: Peel => {
334332let 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) ;
336334( peeled. 0 , peeled. 1 , peeled. 2 , false )
337335}
338336}
@@ -413,10 +411,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
413411& self ,
414412pat : & ' tcx Pat < ' tcx > ,
415413expected : Ty < ' tcx > ,
416- mut def_bm : BindingAnnotation ,
414+ mut def_br : ByRef ,
417415max_peelable_mutability : Mutability ,
418416mut max_ref_mutability : Mutability ,
419- ) -> ( Ty < ' tcx > , BindingAnnotation , Mutability ) {
417+ ) -> ( Ty < ' tcx > , ByRef , Mutability ) {
420418let mut expected = self . try_structurally_resolve_type ( pat. span , expected) ;
421419// Peel off as many `&` or `&mut` from the scrutinee type as possible. For example,
422420// for `match &&&mut Some(5)` the loop runs three times, aborting when it reaches
@@ -437,7 +435,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
437435 pat_adjustments. push ( expected) ;
438436
439437 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 {
441439// If default binding mode is by value, make it `ref` or `ref mut`
442440// (depending on whether we observe `&` or `&mut`).
443441ByRef :: No |
@@ -450,21 +448,21 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
450448}
451449
452450if 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 ) {
455453 max_ref_mutability = Mutability :: Not ;
456454}
457455}
458456
459457if !pat_adjustments. is_empty ( ) {
460- debug ! ( "default binding mode is now {:?}" , def_bm ) ;
458+ debug ! ( "default binding mode is now {:?}" , def_br ) ;
461459self . typeck_results
462460. borrow_mut ( )
463461. pat_adjustments_mut ( )
464462. insert ( pat. hir_id , pat_adjustments) ;
465463}
466464
467- ( expected, def_bm , max_ref_mutability)
465+ ( expected, def_br , max_ref_mutability)
468466}
469467
470468fn check_pat_lit (
@@ -675,7 +673,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
675673expected : Ty < ' tcx > ,
676674pat_info : PatInfo < ' tcx , ' _ > ,
677675) -> 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;
679677
680678// Determine the binding mode...
681679let bm = match ba {
0 commit comments