Add+Use mir::BinOp::Cmp
This commit is contained in:
parent
744c664ba2
commit
3da115a93b
35 changed files with 521 additions and 119 deletions
|
@ -1444,6 +1444,8 @@ pub enum BinOp {
|
|||
Ge,
|
||||
/// The `>` operator (greater than)
|
||||
Gt,
|
||||
/// The `<=>` operator (three-way comparison, like `Ord::cmp`)
|
||||
Cmp,
|
||||
/// The `ptr.offset` operator
|
||||
Offset,
|
||||
}
|
||||
|
|
|
@ -276,6 +276,11 @@ impl<'tcx> BinOp {
|
|||
&BinOp::Eq | &BinOp::Lt | &BinOp::Le | &BinOp::Ne | &BinOp::Ge | &BinOp::Gt => {
|
||||
tcx.types.bool
|
||||
}
|
||||
&BinOp::Cmp => {
|
||||
// these should be integer-like types of the same size.
|
||||
assert_eq!(lhs_ty, rhs_ty);
|
||||
tcx.ty_ordering_enum(None)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -312,7 +317,8 @@ impl BinOp {
|
|||
BinOp::Gt => hir::BinOpKind::Gt,
|
||||
BinOp::Le => hir::BinOpKind::Le,
|
||||
BinOp::Ge => hir::BinOpKind::Ge,
|
||||
BinOp::AddUnchecked
|
||||
BinOp::Cmp
|
||||
| BinOp::AddUnchecked
|
||||
| BinOp::SubUnchecked
|
||||
| BinOp::MulUnchecked
|
||||
| BinOp::ShlUnchecked
|
||||
|
|
|
@ -905,6 +905,13 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
self.get_lang_items(())
|
||||
}
|
||||
|
||||
/// Gets a `Ty` representing the [`LangItem::OrderingEnum`]
|
||||
#[track_caller]
|
||||
pub fn ty_ordering_enum(self, span: Option<Span>) -> Ty<'tcx> {
|
||||
let ordering_enum = self.require_lang_item(hir::LangItem::OrderingEnum, span);
|
||||
self.type_of(ordering_enum).no_bound_vars().unwrap()
|
||||
}
|
||||
|
||||
/// Obtain the given diagnostic item's `DefId`. Use `is_diagnostic_item` if you just want to
|
||||
/// compare against another `DefId`, since `is_diagnostic_item` is cheaper.
|
||||
pub fn get_diagnostic_item(self, name: Symbol) -> Option<DefId> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue