@@ -69,7 +69,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
6969 ImplTraitContext :: Disallowed ( ImplTraitPosition :: Path ) ,
7070 None ,
7171 ) ;
72- break hir:: PatKind :: Path ( qpath) ;
72+ break hir:: PatKind :: Expr ( hir :: PatExprKind :: Path ( qpath) ) ;
7373 }
7474 PatKind :: Struct ( qself, path, fields, etc) => {
7575 let qpath = self . lower_qpath (
@@ -117,9 +117,16 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
117117 break hir:: PatKind :: Ref ( self . lower_pat ( inner) , * mutbl) ;
118118 }
119119 PatKind :: Range ( e1, e2, Spanned { node : end, .. } ) => {
120+ let mut lower_end = |e : & Expr | {
121+ & * self . arena . alloc ( hir:: PatExpr {
122+ hir_id : self . lower_node_id ( e. id ) ,
123+ span : e. span ,
124+ kind : self . lower_expr_within_pat ( e, true ) ,
125+ } )
126+ } ;
120127 break hir:: PatKind :: Range (
121- e1. as_deref ( ) . map ( |e| self . lower_expr_within_pat ( e , true ) ) ,
122- e2. as_deref ( ) . map ( |e| self . lower_expr_within_pat ( e , true ) ) ,
128+ e1. as_deref ( ) . map ( |e| lower_end ( e ) ) ,
129+ e2. as_deref ( ) . map ( |e| lower_end ( e ) ) ,
123130 self . lower_range_end ( end, e2. is_some ( ) ) ,
124131 ) ;
125132 }
@@ -306,14 +313,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
306313 Some ( res) => {
307314 let hir_id = self . next_id ( ) ;
308315 let res = self . lower_res ( res) ;
309- hir:: PatKind :: Path ( hir:: QPath :: Resolved (
316+ hir:: PatKind :: Expr ( hir :: PatExprKind :: Path ( hir:: QPath :: Resolved (
310317 None ,
311318 self . arena . alloc ( hir:: Path {
312319 span : self . lower_span ( ident. span ) ,
313320 res,
314321 segments : arena_vec ! [ self ; hir:: PathSegment :: new( self . lower_ident( ident) , hir_id, res) ] ,
315322 } ) ,
316- ) )
323+ ) ) )
317324 }
318325 }
319326 }
@@ -370,16 +377,12 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
370377 // }
371378 // m!(S);
372379 // ```
373- fn lower_expr_within_pat (
374- & mut self ,
375- expr : & Expr ,
376- allow_paths : bool ,
377- ) -> & ' hir hir:: PatExpr < ' hir > {
380+ fn lower_expr_within_pat ( & mut self , expr : & Expr , allow_paths : bool ) -> hir:: PatExprKind < ' hir > {
378381 let err = |guar| hir:: PatExprKind :: Lit {
379382 lit : self . arena . alloc ( respan ( self . lower_span ( expr. span ) , LitKind :: Err ( guar) ) ) ,
380383 negated : false ,
381384 } ;
382- let kind = match & expr. kind {
385+ match & expr. kind {
383386 ExprKind :: Lit ( lit) => {
384387 hir:: PatExprKind :: Lit { lit : self . lower_lit ( lit, expr. span ) , negated : false }
385388 }
@@ -413,11 +416,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
413416 } ) ;
414417 err ( guar)
415418 }
416- } ;
417- self . arena . alloc ( hir:: PatExpr {
418- hir_id : self . lower_node_id ( expr. id ) ,
419- span : expr. span ,
420- kind,
421- } )
419+ }
422420 }
423421}
0 commit comments