@@ -284,11 +284,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
284
284
ExprKind :: Index ( el, er, brackets_span) => {
285
285
hir:: ExprKind :: Index ( self . lower_expr ( el) , self . lower_expr ( er) , * brackets_span)
286
286
}
287
+ ExprKind :: Range ( e1, e2, lims) if self . tcx . features ( ) . new_range ( ) => {
288
+ self . lower_expr_range :: < true > ( e. span , e1. as_deref ( ) , e2. as_deref ( ) , * lims)
289
+ }
287
290
ExprKind :: Range ( Some ( e1) , Some ( e2) , RangeLimits :: Closed ) => {
288
291
self . lower_expr_range_closed ( e. span , e1, e2)
289
292
}
290
293
ExprKind :: Range ( e1, e2, lims) => {
291
- self . lower_expr_range ( e. span , e1. as_deref ( ) , e2. as_deref ( ) , * lims)
294
+ self . lower_expr_range :: < false > ( e. span , e1. as_deref ( ) , e2. as_deref ( ) , * lims)
292
295
}
293
296
ExprKind :: Underscore => {
294
297
let guar = self . dcx ( ) . emit_err ( UnderscoreExprLhsAssign { span : e. span } ) ;
@@ -1497,7 +1500,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
1497
1500
hir:: ExprKind :: Call ( fn_expr, arena_vec ! [ self ; e1, e2] )
1498
1501
}
1499
1502
1500
- fn lower_expr_range (
1503
+ fn lower_expr_range < const NEW_RANGE : bool > (
1501
1504
& mut self ,
1502
1505
span : Span ,
1503
1506
e1 : Option < & Expr > ,
@@ -1508,15 +1511,39 @@ impl<'hir> LoweringContext<'_, 'hir> {
1508
1511
1509
1512
let lang_item = match ( e1, e2, lims) {
1510
1513
( None , None , HalfOpen ) => hir:: LangItem :: RangeFull ,
1511
- ( Some ( ..) , None , HalfOpen ) => hir:: LangItem :: RangeFrom ,
1514
+ ( Some ( ..) , None , HalfOpen ) => {
1515
+ if NEW_RANGE {
1516
+ hir:: LangItem :: RangeFromCopy
1517
+ } else {
1518
+ hir:: LangItem :: RangeFrom
1519
+ }
1520
+ }
1512
1521
( None , Some ( ..) , HalfOpen ) => hir:: LangItem :: RangeTo ,
1513
- ( Some ( ..) , Some ( ..) , HalfOpen ) => hir:: LangItem :: Range ,
1522
+ ( Some ( ..) , Some ( ..) , HalfOpen ) => {
1523
+ if NEW_RANGE {
1524
+ hir:: LangItem :: RangeCopy
1525
+ } else {
1526
+ hir:: LangItem :: Range
1527
+ }
1528
+ }
1514
1529
( None , Some ( ..) , Closed ) => hir:: LangItem :: RangeToInclusive ,
1515
- ( Some ( ..) , Some ( ..) , Closed ) => unreachable ! ( ) ,
1530
+ ( Some ( ..) , Some ( ..) , Closed ) => {
1531
+ if NEW_RANGE {
1532
+ hir:: LangItem :: RangeInclusiveCopy
1533
+ } else {
1534
+ unreachable ! ( ) // Handled by lower_expr_range_closed
1535
+ }
1536
+ }
1516
1537
( start, None , Closed ) => {
1517
1538
self . dcx ( ) . emit_err ( InclusiveRangeWithNoEnd { span } ) ;
1518
1539
match start {
1519
- Some ( ..) => hir:: LangItem :: RangeFrom ,
1540
+ Some ( ..) => {
1541
+ if NEW_RANGE {
1542
+ hir:: LangItem :: RangeFromCopy
1543
+ } else {
1544
+ hir:: LangItem :: RangeFrom
1545
+ }
1546
+ }
1520
1547
None => hir:: LangItem :: RangeFull ,
1521
1548
}
1522
1549
}
0 commit comments