pub enum IntegerValue {
Unsigned(UIntTy, u128),
Signed(IntTy, i128),
}Expand description
A scalar value.
Variants§
Implementations§
Source§impl IntegerValue
impl IntegerValue
Source§impl IntegerValue
impl IntegerValue
Source§impl IntegerValue
impl IntegerValue
pub fn as_unsigned_mut(&mut self) -> Option<(&mut UIntTy, &mut u128)>
pub fn as_signed_mut(&mut self) -> Option<(&mut IntTy, &mut i128)>
Source§impl IntegerValue
impl IntegerValue
pub fn variant_name(&self) -> &'static str
Source§impl IntegerValue
impl IntegerValue
pub fn variant_index_arity(&self) -> (u32, usize)
Source§impl IntegerValue
impl IntegerValue
fn ptr_size_max(ptr_size: ByteCount, signed: bool) -> u128
fn ptr_size_min(ptr_size: ByteCount, signed: bool) -> i128
pub fn ty(&self) -> IntegerTy
pub fn is_int(&self) -> bool
pub fn is_uint(&self) -> bool
Sourcepub fn as_uint(&self) -> Option<u128>
pub fn as_uint(&self) -> Option<u128>
When computing the result of binary operations, we convert the values to u128 then back to the target type (while performing dynamic checks of course).
pub fn uint_is_in_bounds(ptr_size: ByteCount, ty: UIntTy, v: u128) -> bool
pub fn from_unchecked_uint(ty: UIntTy, v: u128) -> IntegerValue
pub fn from_uint(ptr_size: ByteCount, ty: UIntTy, v: u128) -> Option<Self>
pub fn mk_usize(value: u128) -> Self
Sourcepub fn as_int(&self) -> Option<i128>
pub fn as_int(&self) -> Option<i128>
When computing the result of binary operations, we convert the values to i128 then back to the target type (while performing dynamic checks of course).
pub fn int_is_in_bounds(ptr_size: ByteCount, ty: IntTy, v: i128) -> bool
pub fn from_unchecked_int(ty: IntTy, v: i128) -> IntegerValue
Sourcepub fn to_bits(&self) -> u128
pub fn to_bits(&self) -> u128
Most integers are represented as u128 by rustc. We must be careful not to sign-extend.
Sourcepub fn from_le_bytes(ty: IntegerTy, bytes: [u8; 16]) -> Self
pub fn from_le_bytes(ty: IntegerTy, bytes: [u8; 16]) -> Self
Translates little endian bytes into a corresponding IntegerValue.
This needs to do the round-trip to the correct integer type to guarantee
that the values are correctly sign-extended (e.g. if the bytes encode -1i8, taking all 16 bytes
would lead to the value 255i128 instead of -1i128).
pub fn from_bits(ty: IntegerTy, bits: u128) -> Self
Sourcepub fn from_int(ptr_size: ByteCount, ty: IntTy, v: i128) -> Option<IntegerValue>
pub fn from_int(ptr_size: ByteCount, ty: IntTy, v: i128) -> Option<IntegerValue>
Warning: most constants are stored as u128 by rustc. When converting
to i128, it is not correct to do v as i128, we must reinterpret the
bits (see IntegerValue::from_le_bytes).
Sourcepub fn add(self, n: u128) -> Option<Self>
pub fn add(self, n: u128) -> Option<Self>
Increment the value, staying within the same integer type. Returns None on overflow.
pub fn to_constant(self) -> ConstantExpr
Trait Implementations§
Source§impl AstVisitable for IntegerValue
impl AstVisitable for IntegerValue
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 drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>
fn drive_two<V: ZipAst>(&self, other: &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))where
Self: Sized,
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
self, in pre-order traversal.Source§fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
self, in pre-order traversal.Source§impl BodyVisitable for IntegerValue
impl BodyVisitable for IntegerValue
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))where
Self: Sized,
fn dyn_visit_in_body<T: BodyVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
self, in pre-order traversal.Source§fn dyn_visit_in_body_mut<T: BodyVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
fn dyn_visit_in_body_mut<T: BodyVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
self, in pre-order traversal.Source§impl Clone for IntegerValue
impl Clone for IntegerValue
Source§fn clone(&self) -> IntegerValue
fn clone(&self) -> IntegerValue
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for IntegerValue
Source§impl Debug for IntegerValue
impl Debug for IntegerValue
Source§impl<'de> Deserialize<'de> for IntegerValue
impl<'de> Deserialize<'de> for IntegerValue
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<'de, __State: ?Sized> DeserializeState<'de, __State> for IntegerValuewhere
UIntTy: Deserialize<'de>,
u128: Deserialize<'de>,
IntTy: Deserialize<'de>,
i128: Deserialize<'de>,
impl<'de, __State: ?Sized> DeserializeState<'de, __State> for IntegerValuewhere
UIntTy: Deserialize<'de>,
u128: Deserialize<'de>,
IntTy: Deserialize<'de>,
i128: Deserialize<'de>,
fn deserialize_state<__D>(
__state: &__State,
__deserializer: __D,
) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for IntegerValue
impl Display for IntegerValue
Source§impl<'s, V> Drive<'s, V> for IntegerValue
impl<'s, V> Drive<'s, V> for IntegerValue
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 IntegerValue
impl<'s, V> DriveMut<'s, V> for IntegerValue
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.Source§impl<'s, V> DriveTwo<'s, V> for IntegerValue
impl<'s, V> DriveTwo<'s, V> for IntegerValue
Source§fn drive_two_inner(
&'s self,
other: &'s Self,
visitor: &mut V,
) -> ControlFlow<V::Break>
fn drive_two_inner( &'s self, other: &'s Self, visitor: &mut V, ) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self and other, if they correspond. If
the values don’t match up, this returns Break(Default::default()).impl Eq for IntegerValue
Source§impl Hash for IntegerValue
impl Hash for IntegerValue
Source§impl Ord for IntegerValue
impl Ord for IntegerValue
Source§fn cmp(&self, other: &IntegerValue) -> Ordering
fn cmp(&self, other: &IntegerValue) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for IntegerValue
impl PartialEq for IntegerValue
Source§impl PartialOrd for IntegerValue
impl PartialOrd for IntegerValue
Source§impl Serialize for IntegerValue
impl Serialize for IntegerValue
Source§impl<__State: ?Sized> SerializeState<__State> for IntegerValue
impl<__State: ?Sized> SerializeState<__State> for IntegerValue
fn serialize_state<__S>(
&self,
__state: &__State,
__serializer: __S,
) -> Result<__S::Ok, __S::Error>where
__S: Serializer,
impl StructuralPartialEq for IntegerValue
Auto Trait Implementations§
impl Freeze for IntegerValue
impl RefUnwindSafe for IntegerValue
impl Send for IntegerValue
impl Sync for IntegerValue
impl Unpin for IntegerValue
impl UnsafeUnpin for IntegerValue
impl UnwindSafe for IntegerValue
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> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
impl<T> Dedup for T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§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<T> HashConsable for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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 moreimpl<T> Mappable for T
impl<N> NodeTrait for N
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
Source§fn visit_vars(&mut self, v: &mut impl VarsVisitor)
fn visit_vars(&mut self, v: &mut impl VarsVisitor)
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen De Bruijn indices
will count from the outside of self.Source§fn substitute(self, generics: &GenericArgs) -> Self
fn substitute(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
Note: if self is an item that comes from a TraitDecl, you must use
substitute_with_self or substitute_inner_binder, otherwise you’ll get panics.Source§fn substitute_inner_binder(self, generics: &GenericArgs) -> Self
fn substitute_inner_binder(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
This is appropriate when substituting an inner binder.Source§fn substitute_explicits(self, generics: &GenericArgs) -> Self
fn substitute_explicits(self, generics: &GenericArgs) -> Self
Source§fn substitute_with_self(
self,
generics: &GenericArgs,
self_ref: &TraitRefKind,
) -> Self
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
TraitRefKind::SelfId trait ref.Source§fn substitute_with_tref(self, tref: &TraitRef) -> Self
fn substitute_with_tref(self, tref: &TraitRef) -> Self
TraitRefKind::SelfId trait ref.Source§fn try_substitute_with_tref(
self,
tref: &TraitRef,
) -> Result<Self, GenericsMismatch>
fn try_substitute_with_tref( self, tref: &TraitRef, ) -> Result<Self, GenericsMismatch>
TraitRefKind::SelfId trait ref.fn try_substitute( self, generics: &GenericArgs, ) -> Result<Self, GenericsMismatch>
fn try_substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Result<Self, GenericsMismatch>
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.