pub struct SizeExpr(pub HashConsed<WithCachedTypeInfo<SizeExprKind>>);Expand description
An expression that represents a size in bytes.
Tuple Fields§
§0: HashConsed<WithCachedTypeInfo<SizeExprKind>>Implementations§
Source§impl SizeExpr
impl SizeExpr
pub fn new(kind: SizeExprKind) -> Self
pub fn kind(&self) -> &SizeExprKind
pub fn with_kind_mut<R>(&mut self, f: impl FnOnce(&mut SizeExprKind) -> R) -> R
pub fn from_usize(value: u128) -> Self
Sourcepub fn offset_of(
ty: TypeDeclRef,
variant: Option<VariantId>,
field: FieldId,
) -> Self
pub fn offset_of( ty: TypeDeclRef, variant: Option<VariantId>, field: FieldId, ) -> Self
The symbolic constant offset_of!(ty, variant.field).
fn constant(kind: ConstantExprKind) -> Self
Sourcepub fn max_or(values: Vec<SizeExpr>, default: SizeExpr) -> SizeExpr
pub fn max_or(values: Vec<SizeExpr>, default: SizeExpr) -> SizeExpr
The maximum of the given values; or default if the list is empty.
Sourcepub fn max_align(values: Vec<SizeExpr>) -> SizeExpr
pub fn max_align(values: Vec<SizeExpr>) -> SizeExpr
The maximum of the given values; defaults to 1 if the list is empty.
Sourcepub fn max_size(values: Vec<SizeExpr>) -> SizeExpr
pub fn max_size(values: Vec<SizeExpr>) -> SizeExpr
The maximum of the given values; defaults to 0 if the list is empty.
pub fn align_to(base: SizeExpr, target_align: SizeExpr) -> SizeExpr
pub fn at_least(value: SizeExpr) -> SizeExpr
pub fn if_inhabited( ty: &Ty, then_size: SizeExpr, else_size: SizeExpr, ) -> SizeExpr
Sourcepub fn normalize(
self,
krate: Option<&TranslatedCrate>,
for_target: Option<&TargetTriple>,
allow_precision_loss: bool,
) -> Self
pub fn normalize( self, krate: Option<&TranslatedCrate>, for_target: Option<&TargetTriple>, allow_precision_loss: bool, ) -> Self
Recursively evaluate the parts of this expression that are known in krate.
If allow_precision_loss is false, SizeOf and AlignOf are only replaced with a
SizeExprKind::Constant.
fn as_usize(&self) -> Option<u128>
Methods from Deref<Target = WithCachedTypeInfo<SizeExprKind>>§
Trait Implementations§
Source§impl AstVisitable for SizeExpr
impl AstVisitable for SizeExpr
Source§fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
Recursively visit this type with the provided visitor. This calls the visitor’s
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>
Recursively visit this type with the provided visitor. This calls the visitor’s
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>
Recursively visit this type with the provided visitor. This calls the visitor’s
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,
Visit all occurrences of that type inside
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,
Visit all occurrences of that type inside
self, in pre-order traversal.Source§impl Deref for SizeExpr
impl Deref for SizeExpr
Source§type Target = WithCachedTypeInfo<SizeExprKind>
type Target = WithCachedTypeInfo<SizeExprKind>
The resulting type after dereferencing.
Source§impl<'de, __State: ?Sized + DedupSerializerState> DeserializeState<'de, __State> for SizeExpr
impl<'de, __State: ?Sized + DedupSerializerState> DeserializeState<'de, __State> for SizeExpr
fn deserialize_state<__D>(
__state: &__State,
__deserializer: __D,
) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'s, V> Drive<'s, V> for SizeExpr
impl<'s, V> Drive<'s, V> for SizeExpr
Source§fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
Call
v.visit() on the immediate contents of self.Source§impl<'s, V> DriveMut<'s, V> for SizeExpr
impl<'s, V> DriveMut<'s, V> for SizeExpr
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>
Call
v.visit() on the immediate contents of self.Source§impl<'s, V> DriveTwo<'s, V> for SizeExpr
impl<'s, V> DriveTwo<'s, V> for SizeExpr
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>
Call
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 SizeExpr
Source§impl<C: AstFormatter> FmtWithCtx<C> for SizeExpr
impl<C: AstFormatter> FmtWithCtx<C> for SizeExpr
Source§impl From<SizeExprKind> for SizeExpr
impl From<SizeExprKind> for SizeExpr
Source§fn from(kind: SizeExprKind) -> Self
fn from(kind: SizeExprKind) -> Self
Converts to this type from the input type.
Source§impl Ord for SizeExpr
impl Ord for SizeExpr
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the minimum of two values. Read more
Source§impl PartialOrd for SizeExpr
impl PartialOrd for SizeExpr
Source§impl<__State: ?Sized + DedupSerializerState> SerializeState<__State> for SizeExpr
impl<__State: ?Sized + DedupSerializerState> SerializeState<__State> for SizeExpr
fn serialize_state<__S>(
&self,
__state: &__State,
__serializer: __S,
) -> Result<__S::Ok, __S::Error>where
__S: Serializer,
impl StructuralPartialEq for SizeExpr
Auto Trait Implementations§
impl Freeze for SizeExpr
impl RefUnwindSafe for SizeExpr
impl Send for SizeExpr
impl Sync for SizeExpr
impl Unpin for SizeExpr
impl UnsafeUnpin for SizeExpr
impl UnwindSafe for SizeExpr
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
Mutably borrows from an owned value. Read more
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<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
Checks if this value is equivalent to the given key. Read more
§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
Compare self to
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> ⓘ
Converts
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> ⓘ
Converts
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
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
Source§fn type_info(&self) -> TypeInfo
fn type_info(&self) -> TypeInfo
Compute various bits of information about the contents of this value. See methods on
TypeInfo.Source§fn visit_vars(&mut self, v: &mut impl VarsVisitor)
fn visit_vars(&mut self, v: &mut impl VarsVisitor)
Visit the variables contained in
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
Substitute the generic variables inside
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
Substitute the generic variables inside
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
Substitute only the type, region and const generic args.
Source§fn substitute_with_self(
self,
generics: &GenericArgs,
self_ref: &TraitRefKind,
) -> Self
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
Substitute the generic variables as well as the
TraitRefKind::SelfId trait ref.Source§fn substitute_with_tref(self, tref: &TraitRef) -> Self
fn substitute_with_tref(self, tref: &TraitRef) -> Self
Substitute the generic variables as well as the
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>
Substitute the generic variables as well as the
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
Move under one binder.
Source§fn move_under_binders(self, depth: DeBruijnId) -> Self
fn move_under_binders(self, depth: DeBruijnId) -> Self
Move under
depth binders.Source§fn move_from_under_binder(self) -> Option<Self>
fn move_from_under_binder(self) -> Option<Self>
Move from under one binder.
Source§fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
Move the value out of
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>
Visit the de Bruijn ids contained in
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.Source§fn collect_regions(&self) -> impl Iterator<Item = Region>
fn collect_regions(&self) -> impl Iterator<Item = Region>
Collect the regions contained in
self.Source§fn replace_erased_regions(self, f: impl FnMut() -> Region) -> Self
fn replace_erased_regions(self, f: impl FnMut() -> Region) -> Self
Replace all the erased regions by the output of the provided function. Binders levels are
handled automatically.