Remove scalar fn and tighten the BiOp Ty assertions
This commit is contained in:
parent
3b97b5130a
commit
638b08ebdf
@ -278,10 +278,6 @@ impl BinOp {
|
|||||||
/// Return the type of this operation for the given input Ty.
|
/// Return the type of this operation for the given input Ty.
|
||||||
/// This function does not perform type checking, and it currently doesn't handle SIMD.
|
/// This function does not perform type checking, and it currently doesn't handle SIMD.
|
||||||
pub fn ty(&self, lhs_ty: Ty, rhs_ty: Ty) -> Ty {
|
pub fn ty(&self, lhs_ty: Ty, rhs_ty: Ty) -> Ty {
|
||||||
let lhs_kind = lhs_ty.kind();
|
|
||||||
let rhs_kind = rhs_ty.kind();
|
|
||||||
assert!(lhs_kind.is_primitive() || lhs_kind.is_any_ptr());
|
|
||||||
assert!(rhs_kind.is_primitive() || rhs_kind.is_any_ptr());
|
|
||||||
match self {
|
match self {
|
||||||
BinOp::Add
|
BinOp::Add
|
||||||
| BinOp::AddUnchecked
|
| BinOp::AddUnchecked
|
||||||
@ -295,13 +291,23 @@ impl BinOp {
|
|||||||
| BinOp::BitAnd
|
| BinOp::BitAnd
|
||||||
| BinOp::BitOr => {
|
| BinOp::BitOr => {
|
||||||
assert_eq!(lhs_ty, rhs_ty);
|
assert_eq!(lhs_ty, rhs_ty);
|
||||||
|
assert!(lhs_ty.kind().is_primitive());
|
||||||
lhs_ty
|
lhs_ty
|
||||||
}
|
}
|
||||||
BinOp::Shl | BinOp::ShlUnchecked | BinOp::Shr | BinOp::ShrUnchecked | BinOp::Offset => {
|
BinOp::Shl | BinOp::ShlUnchecked | BinOp::Shr | BinOp::ShrUnchecked => {
|
||||||
|
assert!(lhs_ty.kind().is_primitive());
|
||||||
|
assert!(rhs_ty.kind().is_primitive());
|
||||||
|
lhs_ty
|
||||||
|
}
|
||||||
|
BinOp::Offset => {
|
||||||
|
assert!(lhs_ty.kind().is_raw_ptr());
|
||||||
|
assert!(rhs_ty.kind().is_integral());
|
||||||
lhs_ty
|
lhs_ty
|
||||||
}
|
}
|
||||||
BinOp::Eq | BinOp::Lt | BinOp::Le | BinOp::Ne | BinOp::Ge | BinOp::Gt => {
|
BinOp::Eq | BinOp::Lt | BinOp::Le | BinOp::Ne | BinOp::Ge | BinOp::Gt => {
|
||||||
assert_eq!(lhs_ty, rhs_ty);
|
assert_eq!(lhs_ty, rhs_ty);
|
||||||
|
let lhs_kind = lhs_ty.kind();
|
||||||
|
assert!(lhs_kind.is_primitive() || lhs_kind.is_raw_ptr() || lhs_kind.is_fn_ptr());
|
||||||
Ty::bool_ty()
|
Ty::bool_ty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -283,24 +283,6 @@ impl TyKind {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A scalar type is one that denotes an atomic datum, with no sub-components.
|
|
||||||
/// (A RawPtr is scalar because it represents a non-managed pointer, so its
|
|
||||||
/// contents are abstract to rustc.)
|
|
||||||
#[inline]
|
|
||||||
pub fn is_scalar(&self) -> bool {
|
|
||||||
matches!(
|
|
||||||
self,
|
|
||||||
TyKind::RigidTy(RigidTy::Bool)
|
|
||||||
| TyKind::RigidTy(RigidTy::Char)
|
|
||||||
| TyKind::RigidTy(RigidTy::Int(_))
|
|
||||||
| TyKind::RigidTy(RigidTy::Float(_))
|
|
||||||
| TyKind::RigidTy(RigidTy::Uint(_))
|
|
||||||
| TyKind::RigidTy(RigidTy::FnDef(..))
|
|
||||||
| TyKind::RigidTy(RigidTy::FnPtr(_))
|
|
||||||
| TyKind::RigidTy(RigidTy::RawPtr(..))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn is_float(&self) -> bool {
|
pub fn is_float(&self) -> bool {
|
||||||
matches!(self, TyKind::RigidTy(RigidTy::Float(_)))
|
matches!(self, TyKind::RigidTy(RigidTy::Float(_)))
|
||||||
@ -871,7 +853,7 @@ pub struct Binder<T> {
|
|||||||
|
|
||||||
impl<T> Binder<T> {
|
impl<T> Binder<T> {
|
||||||
/// Create a new binder with the given bound vars.
|
/// Create a new binder with the given bound vars.
|
||||||
pub fn new(value: T, bound_vars: Vec<BoundVariableKind>) -> Self {
|
pub fn bind_with_vars(value: T, bound_vars: Vec<BoundVariableKind>) -> Self {
|
||||||
Binder { value, bound_vars }
|
Binder { value, bound_vars }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user