@@ -69,7 +69,13 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
6969 ImplTraitContext :: Disallowed ( ImplTraitPosition :: Path ) ,
7070 None ,
7171 ) ;
72- break hir:: PatKind :: Path ( qpath) ;
72+ let kind = hir:: PatExprKind :: Path ( qpath) ;
73+ return hir:: Pat {
74+ hir_id : pat_hir_id,
75+ kind : hir:: PatKind :: Expr ( kind) ,
76+ span : pattern. span ,
77+ default_binding_modes : true ,
78+ } ;
7379 }
7480 PatKind :: Struct ( qself, path, fields, etc) => {
7581 let qpath = self . lower_qpath (
@@ -117,9 +123,16 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
117123 break hir:: PatKind :: Ref ( self . lower_pat ( inner) , * mutbl) ;
118124 }
119125 PatKind :: Range ( e1, e2, Spanned { node : end, .. } ) => {
126+ let mut lower_end = |e : & Expr | {
127+ & * self . arena . alloc ( hir:: PatExpr {
128+ hir_id : self . lower_node_id ( e. id ) ,
129+ span : e. span ,
130+ kind : self . lower_expr_within_pat ( e, true ) ,
131+ } )
132+ } ;
120133 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 ) ) ,
134+ e1. as_deref ( ) . map ( |e| lower_end ( e ) ) ,
135+ e2. as_deref ( ) . map ( |e| lower_end ( e ) ) ,
123136 self . lower_range_end ( end, e2. is_some ( ) ) ,
124137 ) ;
125138 }
@@ -306,14 +319,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
306319 Some ( res) => {
307320 let hir_id = self . next_id ( ) ;
308321 let res = self . lower_res ( res) ;
309- hir:: PatKind :: Path ( hir:: QPath :: Resolved (
322+ hir:: PatKind :: Expr ( hir :: PatExprKind :: Path ( hir:: QPath :: Resolved (
310323 None ,
311324 self . arena . alloc ( hir:: Path {
312325 span : self . lower_span ( ident. span ) ,
313326 res,
314327 segments : arena_vec ! [ self ; hir:: PathSegment :: new( self . lower_ident( ident) , hir_id, res) ] ,
315328 } ) ,
316- ) )
329+ ) ) )
317330 }
318331 }
319332 }
@@ -370,16 +383,12 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
370383 // }
371384 // m!(S);
372385 // ```
373- fn lower_expr_within_pat (
374- & mut self ,
375- expr : & Expr ,
376- allow_paths : bool ,
377- ) -> & ' hir hir:: PatExpr < ' hir > {
386+ fn lower_expr_within_pat ( & mut self , expr : & Expr , allow_paths : bool ) -> hir:: PatExprKind < ' hir > {
378387 let err = |guar| hir:: PatExprKind :: Lit {
379388 lit : self . arena . alloc ( respan ( self . lower_span ( expr. span ) , LitKind :: Err ( guar) ) ) ,
380389 negated : false ,
381390 } ;
382- let kind = match & expr. kind {
391+ match & expr. kind {
383392 ExprKind :: Lit ( lit) => {
384393 hir:: PatExprKind :: Lit { lit : self . lower_lit ( lit, expr. span ) , negated : false }
385394 }
@@ -413,11 +422,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
413422 } ) ;
414423 err ( guar)
415424 }
416- } ;
417- self . arena . alloc ( hir:: PatExpr {
418- hir_id : self . lower_node_id ( expr. id ) ,
419- span : expr. span ,
420- kind,
421- } )
425+ }
422426 }
423427}
0 commit comments