pub enum ExactSizeExprKind {
Constant(ConstantExpr),
FromMetadata(MetadataValue),
Max(Vec<ExactSizeExpr>),
Min(Vec<ExactSizeExpr>),
Plus(ExactSizeExpr, ExactSizeExpr),
Scale(ExactSizeExpr, ConstantExpr),
AlignTo {
base: ExactSizeExpr,
target_align: ExactSizeExpr,
},
IfInhabited {
ty: Ty,
then_size: ExactSizeExpr,
else_size: ExactSizeExpr,
},
}Variants§
Constant(ConstantExpr)
An arbitrary constant of type usize.
FromMetadata(MetadataValue)
Layout information stored in the pointer metadata to this object.
Max(Vec<ExactSizeExpr>)
Min(Vec<ExactSizeExpr>)
Plus(ExactSizeExpr, ExactSizeExpr)
Scale(ExactSizeExpr, ConstantExpr)
AlignTo
The next multiple of target_align from base.
IfInhabited
A size expression that depens on whether the given type is inhabited.
Implementations§
Source§impl ExactSizeExprKind
impl ExactSizeExprKind
pub fn is_constant(&self) -> bool
pub fn is_from_metadata(&self) -> bool
pub fn is_max(&self) -> bool
pub fn is_min(&self) -> bool
pub fn is_plus(&self) -> bool
pub fn is_scale(&self) -> bool
pub fn is_align_to(&self) -> bool
pub fn is_if_inhabited(&self) -> bool
Source§impl ExactSizeExprKind
impl ExactSizeExprKind
pub fn as_constant(&self) -> Option<&ConstantExpr>
pub fn as_from_metadata(&self) -> Option<&MetadataValue>
pub fn as_max(&self) -> Option<&Vec<ExactSizeExpr>>
pub fn as_min(&self) -> Option<&Vec<ExactSizeExpr>>
pub fn as_plus(&self) -> Option<(&ExactSizeExpr, &ExactSizeExpr)>
pub fn as_scale(&self) -> Option<(&ExactSizeExpr, &ConstantExpr)>
pub fn as_align_to(&self) -> Option<(&ExactSizeExpr, &ExactSizeExpr)>
pub fn as_if_inhabited(&self) -> Option<(&Ty, &ExactSizeExpr, &ExactSizeExpr)>
Source§impl ExactSizeExprKind
impl ExactSizeExprKind
pub fn as_constant_mut(&mut self) -> Option<&mut ConstantExpr>
pub fn as_from_metadata_mut(&mut self) -> Option<&mut MetadataValue>
pub fn as_max_mut(&mut self) -> Option<&mut Vec<ExactSizeExpr>>
pub fn as_min_mut(&mut self) -> Option<&mut Vec<ExactSizeExpr>>
pub fn as_plus_mut( &mut self, ) -> Option<(&mut ExactSizeExpr, &mut ExactSizeExpr)>
pub fn as_scale_mut( &mut self, ) -> Option<(&mut ExactSizeExpr, &mut ConstantExpr)>
pub fn as_align_to_mut( &mut self, ) -> Option<(&mut ExactSizeExpr, &mut ExactSizeExpr)>
pub fn as_if_inhabited_mut( &mut self, ) -> Option<(&mut Ty, &mut ExactSizeExpr, &mut ExactSizeExpr)>
Source§impl ExactSizeExprKind
impl ExactSizeExprKind
pub fn variant_name(&self) -> &'static str
Source§impl ExactSizeExprKind
impl ExactSizeExprKind
pub fn zero() -> Self
pub fn from_usize(value: u128) -> Self
pub fn into_expr(self) -> ExactSizeExpr
Trait Implementations§
Source§impl AstVisitable for ExactSizeExprKind
impl AstVisitable for ExactSizeExprKind
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 Clone for ExactSizeExprKind
impl Clone for ExactSizeExprKind
Source§fn clone(&self) -> ExactSizeExprKind
fn clone(&self) -> ExactSizeExprKind
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ExactSizeExprKind
impl Debug for ExactSizeExprKind
Source§impl<'de, __State: ?Sized> DeserializeState<'de, __State> for ExactSizeExprKindwhere
ConstantExpr: DeserializeState<'de, __State>,
MetadataValue: DeserializeState<'de, __State>,
Vec<ExactSizeExpr>: DeserializeState<'de, __State>,
ExactSizeExpr: DeserializeState<'de, __State>,
Ty: DeserializeState<'de, __State>,
impl<'de, __State: ?Sized> DeserializeState<'de, __State> for ExactSizeExprKindwhere
ConstantExpr: DeserializeState<'de, __State>,
MetadataValue: DeserializeState<'de, __State>,
Vec<ExactSizeExpr>: DeserializeState<'de, __State>,
ExactSizeExpr: DeserializeState<'de, __State>,
Ty: DeserializeState<'de, __State>,
fn deserialize_state<__D>(
__state: &__State,
__deserializer: __D,
) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'s, V> Drive<'s, V> for ExactSizeExprKindwhere
V: Visitor + Visit<'s, ConstantExpr> + Visit<'s, MetadataValue> + Visit<'s, Vec<ExactSizeExpr>> + Visit<'s, ExactSizeExpr> + Visit<'s, Ty>,
impl<'s, V> Drive<'s, V> for ExactSizeExprKindwhere
V: Visitor + Visit<'s, ConstantExpr> + Visit<'s, MetadataValue> + Visit<'s, Vec<ExactSizeExpr>> + Visit<'s, ExactSizeExpr> + Visit<'s, Ty>,
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 ExactSizeExprKindwhere
V: Visitor + VisitMut<'s, ConstantExpr> + VisitMut<'s, MetadataValue> + VisitMut<'s, Vec<ExactSizeExpr>> + VisitMut<'s, ExactSizeExpr> + VisitMut<'s, Ty>,
impl<'s, V> DriveMut<'s, V> for ExactSizeExprKindwhere
V: Visitor + VisitMut<'s, ConstantExpr> + VisitMut<'s, MetadataValue> + VisitMut<'s, Vec<ExactSizeExpr>> + VisitMut<'s, ExactSizeExpr> + VisitMut<'s, Ty>,
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 ExactSizeExprKindwhere
V: Visitor<Break: Default> + VisitTwo<'s, ConstantExpr> + VisitTwo<'s, MetadataValue> + VisitTwo<'s, Vec<ExactSizeExpr>> + VisitTwo<'s, ExactSizeExpr> + VisitTwo<'s, Ty>,
impl<'s, V> DriveTwo<'s, V> for ExactSizeExprKindwhere
V: Visitor<Break: Default> + VisitTwo<'s, ConstantExpr> + VisitTwo<'s, MetadataValue> + VisitTwo<'s, Vec<ExactSizeExpr>> + VisitTwo<'s, ExactSizeExpr> + VisitTwo<'s, Ty>,
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 ExactSizeExprKind
Source§impl From<ExactSizeExprKind> for ExactSizeExpr
impl From<ExactSizeExprKind> for ExactSizeExpr
Source§fn from(kind: ExactSizeExprKind) -> Self
fn from(kind: ExactSizeExprKind) -> Self
Converts to this type from the input type.
Source§impl Hash for ExactSizeExprKind
impl Hash for ExactSizeExprKind
Source§impl Ord for ExactSizeExprKind
impl Ord for ExactSizeExprKind
Source§fn cmp(&self, other: &ExactSizeExprKind) -> Ordering
fn cmp(&self, other: &ExactSizeExprKind) -> Ordering
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
Source§impl PartialEq for ExactSizeExprKind
impl PartialEq for ExactSizeExprKind
Source§impl PartialOrd for ExactSizeExprKind
impl PartialOrd for ExactSizeExprKind
Source§impl<__State: ?Sized> SerializeState<__State> for ExactSizeExprKindwhere
ConstantExpr: SerializeState<__State>,
MetadataValue: SerializeState<__State>,
Vec<ExactSizeExpr>: SerializeState<__State>,
ExactSizeExpr: SerializeState<__State>,
Ty: SerializeState<__State>,
impl<__State: ?Sized> SerializeState<__State> for ExactSizeExprKindwhere
ConstantExpr: SerializeState<__State>,
MetadataValue: SerializeState<__State>,
Vec<ExactSizeExpr>: SerializeState<__State>,
ExactSizeExpr: SerializeState<__State>,
Ty: SerializeState<__State>,
fn serialize_state<__S>(
&self,
__state: &__State,
__serializer: __S,
) -> Result<__S::Ok, __S::Error>where
__S: Serializer,
impl StructuralPartialEq for ExactSizeExprKind
Auto Trait Implementations§
impl Freeze for ExactSizeExprKind
impl RefUnwindSafe for ExactSizeExprKind
impl Send for ExactSizeExprKind
impl Sync for ExactSizeExprKind
impl Unpin for ExactSizeExprKind
impl UnsafeUnpin for ExactSizeExprKind
impl UnwindSafe for ExactSizeExprKind
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 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 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.