pub enum BinOp {
Show 24 variants
BitXor,
BitAnd,
BitOr,
Eq,
Lt,
Le,
Ne,
Ge,
Gt,
Div,
Rem,
Add,
Sub,
Mul,
WrappingAdd,
WrappingSub,
WrappingMul,
CheckedAdd,
CheckedSub,
CheckedMul,
Shl,
Shr,
Offset,
Cmp,
}
Expand description
Binary operations.
Variants§
BitXor
BitAnd
BitOr
Eq
Lt
Le
Ne
Ge
Gt
Div
Fails if the divisor is 0, or if the operation is int::MIN / -1
.
Rem
Fails if the divisor is 0, or if the operation is int::MIN % -1
.
Add
Fails on overflow.
Not present in MIR: this is introduced by the remove_dynamic_checks
pass.
Sub
Fails on overflow.
Not present in MIR: this is introduced by the remove_dynamic_checks
pass.
Mul
Fails on overflow.
Not present in MIR: this is introduced by the remove_dynamic_checks
pass.
WrappingAdd
Wraps on overflow.
WrappingSub
Wraps on overflow.
WrappingMul
Wraps on overflow.
CheckedAdd
Returns (result, did_overflow)
, where result
is the result of the operation with
wrapping semantics, and did_overflow
is a boolean that indicates whether the operation
overflowed. This operation does not fail.
CheckedSub
Like CheckedAdd
.
CheckedMul
Like CheckedAdd
.
Shl
Fails if the shift is bigger than the bit-size of the type.
Shr
Fails if the shift is bigger than the bit-size of the type.
Offset
BinOp(Offset, ptr, n)
for ptr
a pointer to type T
offsets ptr
by n * size_of::<T>()
.
Cmp
BinOp(Cmp, a, b)
returns -1u8
if a < b
, 0u8
if a == b
, and 1u8
if a > b
.
Implementations§
Source§impl BinOp
impl BinOp
pub fn is_bit_xor(&self) -> bool
pub fn is_bit_and(&self) -> bool
pub fn is_bit_or(&self) -> bool
pub fn is_eq(&self) -> bool
pub fn is_lt(&self) -> bool
pub fn is_le(&self) -> bool
pub fn is_ne(&self) -> bool
pub fn is_ge(&self) -> bool
pub fn is_gt(&self) -> bool
pub fn is_div(&self) -> bool
pub fn is_rem(&self) -> bool
pub fn is_add(&self) -> bool
pub fn is_sub(&self) -> bool
pub fn is_mul(&self) -> bool
pub fn is_wrapping_add(&self) -> bool
pub fn is_wrapping_sub(&self) -> bool
pub fn is_wrapping_mul(&self) -> bool
pub fn is_checked_add(&self) -> bool
pub fn is_checked_sub(&self) -> bool
pub fn is_checked_mul(&self) -> bool
pub fn is_shl(&self) -> bool
pub fn is_shr(&self) -> bool
pub fn is_offset(&self) -> bool
pub fn is_cmp(&self) -> bool
Trait Implementations§
Source§impl AstVisitable for BinOp
impl AstVisitable for BinOp
Source§fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner
.Source§fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner
.Source§fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
self
, in pre-order traversal.Source§fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
self
, in pre-order traversal.Source§impl BodyVisitable for BinOp
impl BodyVisitable for BinOp
Source§fn drive_body<V: VisitBody>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive_body<V: VisitBody>(&self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner
.Source§fn drive_body_mut<V: VisitBodyMut>(
&mut self,
v: &mut V,
) -> ControlFlow<V::Break>
fn drive_body_mut<V: VisitBodyMut>( &mut self, v: &mut V, ) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner
.Source§fn dyn_visit_in_body<T: BodyVisitable>(&self, f: impl FnMut(&T))
fn dyn_visit_in_body<T: BodyVisitable>(&self, f: impl FnMut(&T))
self
, in pre-order traversal.Source§fn dyn_visit_in_body_mut<T: BodyVisitable>(&mut self, f: impl FnMut(&mut T))
fn dyn_visit_in_body_mut<T: BodyVisitable>(&mut self, f: impl FnMut(&mut T))
self
, in pre-order traversal.Source§impl<'de> Deserialize<'de> for BinOp
impl<'de> Deserialize<'de> for BinOp
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'s, V> Drive<'s, V> for BinOpwhere
V: Visitor,
impl<'s, V> Drive<'s, V> for BinOpwhere
V: Visitor,
Source§fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit()
on the immediate contents of self
.Source§impl<'s, V> DriveMut<'s, V> for BinOpwhere
V: Visitor,
impl<'s, V> DriveMut<'s, V> for BinOpwhere
V: Visitor,
Source§fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit()
on the immediate contents of self
.impl Copy for BinOp
impl Eq for BinOp
impl StructuralPartialEq for BinOp
Auto Trait Implementations§
impl Freeze for BinOp
impl RefUnwindSafe for BinOp
impl Send for BinOp
impl Sync for BinOp
impl Unpin for BinOp
impl UnwindSafe for BinOp
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
§impl<T> Indentable for Twhere
T: Display,
impl<T> Indentable for Twhere
T: Display,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<I> RecreateContext<I> for I
impl<I> RecreateContext<I> for I
§fn recreate_context(_original_input: I, tail: I) -> I
fn recreate_context(_original_input: I, tail: I) -> I
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
fn substitute(self, generics: &GenericArgs) -> Self
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
Source§fn move_under_binder(self) -> Self
fn move_under_binder(self) -> Self
Source§fn move_under_binders(self, depth: DeBruijnId) -> Self
fn move_under_binders(self, depth: DeBruijnId) -> Self
depth
binders.Source§fn move_from_under_binder(self) -> Option<Self>
fn move_from_under_binder(self) -> Option<Self>
Source§fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
depth
binders. Returns None
if it contains a variable bound in
one of these depth
binders.Source§fn visit_db_id<B>(
&mut self,
f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>,
) -> ControlFlow<B>
fn visit_db_id<B>( &mut self, f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>, ) -> ControlFlow<B>
self
, as seen from the outside of self
. This means
that any variable bound inside self
will be skipped, and all the seen indices will count
from the outside of self.