@@ -69,7 +69,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
69
69
ImplTraitContext :: Disallowed ( ImplTraitPosition :: Path ) ,
70
70
None ,
71
71
) ;
72
- break hir:: PatKind :: Path ( qpath) ;
72
+ break hir:: PatKind :: Expr ( hir :: PatExprKind :: Path ( qpath) ) ;
73
73
}
74
74
PatKind :: Struct ( qself, path, fields, etc) => {
75
75
let qpath = self . lower_qpath (
@@ -117,9 +117,16 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
117
117
break hir:: PatKind :: Ref ( self . lower_pat ( inner) , * mutbl) ;
118
118
}
119
119
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
+ } ;
120
127
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 ) ) ,
123
130
self . lower_range_end ( end, e2. is_some ( ) ) ,
124
131
) ;
125
132
}
@@ -306,14 +313,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
306
313
Some ( res) => {
307
314
let hir_id = self . next_id ( ) ;
308
315
let res = self . lower_res ( res) ;
309
- hir:: PatKind :: Path ( hir:: QPath :: Resolved (
316
+ hir:: PatKind :: Expr ( hir :: PatExprKind :: Path ( hir:: QPath :: Resolved (
310
317
None ,
311
318
self . arena . alloc ( hir:: Path {
312
319
span : self . lower_span ( ident. span ) ,
313
320
res,
314
321
segments : arena_vec ! [ self ; hir:: PathSegment :: new( self . lower_ident( ident) , hir_id, res) ] ,
315
322
} ) ,
316
- ) )
323
+ ) ) )
317
324
}
318
325
}
319
326
}
@@ -370,16 +377,12 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
370
377
// }
371
378
// m!(S);
372
379
// ```
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 > {
378
381
let err = |guar| hir:: PatExprKind :: Lit {
379
382
lit : self . arena . alloc ( respan ( self . lower_span ( expr. span ) , LitKind :: Err ( guar) ) ) ,
380
383
negated : false ,
381
384
} ;
382
- let kind = match & expr. kind {
385
+ match & expr. kind {
383
386
ExprKind :: Lit ( lit) => {
384
387
hir:: PatExprKind :: Lit { lit : self . lower_lit ( lit, expr. span ) , negated : false }
385
388
}
@@ -413,11 +416,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
413
416
} ) ;
414
417
err ( guar)
415
418
}
416
- } ;
417
- self . arena . alloc ( hir:: PatExpr {
418
- hir_id : self . lower_node_id ( expr. id ) ,
419
- span : expr. span ,
420
- kind,
421
- } )
419
+ }
422
420
}
423
421
}
0 commit comments