implement unstable new_range
feature
for RFC 3550, tracking issue #123741
This commit is contained in:
parent
95eaadc773
commit
f530a29944
15 changed files with 210 additions and 14 deletions
|
@ -284,9 +284,6 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||
ExprKind::Index(el, er, brackets_span) => {
|
||||
hir::ExprKind::Index(self.lower_expr(el), self.lower_expr(er), *brackets_span)
|
||||
}
|
||||
ExprKind::Range(Some(e1), Some(e2), RangeLimits::Closed) => {
|
||||
self.lower_expr_range_closed(e.span, e1, e2)
|
||||
}
|
||||
ExprKind::Range(e1, e2, lims) => {
|
||||
self.lower_expr_range(e.span, e1.as_deref(), e2.as_deref(), *lims)
|
||||
}
|
||||
|
@ -1512,15 +1509,39 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
|||
|
||||
let lang_item = match (e1, e2, lims) {
|
||||
(None, None, HalfOpen) => hir::LangItem::RangeFull,
|
||||
(Some(..), None, HalfOpen) => hir::LangItem::RangeFrom,
|
||||
(Some(..), None, HalfOpen) => {
|
||||
if self.tcx.features().new_range() {
|
||||
hir::LangItem::RangeFromCopy
|
||||
} else {
|
||||
hir::LangItem::RangeFrom
|
||||
}
|
||||
}
|
||||
(None, Some(..), HalfOpen) => hir::LangItem::RangeTo,
|
||||
(Some(..), Some(..), HalfOpen) => hir::LangItem::Range,
|
||||
(Some(..), Some(..), HalfOpen) => {
|
||||
if self.tcx.features().new_range() {
|
||||
hir::LangItem::RangeCopy
|
||||
} else {
|
||||
hir::LangItem::Range
|
||||
}
|
||||
}
|
||||
(None, Some(..), Closed) => hir::LangItem::RangeToInclusive,
|
||||
(Some(..), Some(..), Closed) => unreachable!(),
|
||||
(Some(e1), Some(e2), Closed) => {
|
||||
if self.tcx.features().new_range() {
|
||||
hir::LangItem::RangeInclusiveCopy
|
||||
} else {
|
||||
return self.lower_expr_range_closed(span, e1, e2);
|
||||
}
|
||||
}
|
||||
(start, None, Closed) => {
|
||||
self.dcx().emit_err(InclusiveRangeWithNoEnd { span });
|
||||
match start {
|
||||
Some(..) => hir::LangItem::RangeFrom,
|
||||
Some(..) => {
|
||||
if self.tcx.features().new_range() {
|
||||
hir::LangItem::RangeFromCopy
|
||||
} else {
|
||||
hir::LangItem::RangeFrom
|
||||
}
|
||||
}
|
||||
None => hir::LangItem::RangeFull,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue