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