pub enum ConstantExprKind {
Show 13 variants
Literal(ConstantLiteral),
Adt {
kind: VariantKind,
fields: Vec<ConstantFieldExpr>,
},
Array {
fields: Vec<ConstantExpr>,
},
Tuple {
fields: Vec<ConstantExpr>,
},
NamedGlobal(ItemRef),
Borrow(ConstantExpr),
RawBorrow {
mutability: Mutability,
arg: ConstantExpr,
},
Cast {
source: ConstantExpr,
},
ConstRef {
id: ParamConst,
},
FnDef(ItemRef),
FnPtr(ItemRef),
Memory(Vec<u8>),
Todo(String),
}Expand description
The subset of [Expr] that corresponds to constants.
Variants§
Literal(ConstantLiteral)
Adt
Array
Fields
fields: Vec<ConstantExpr>Tuple
Fields
fields: Vec<ConstantExpr>NamedGlobal(ItemRef)
A top-level or associated constant.
Remark: constants can have generic parameters. Example:
struct V<const N: usize, T> {
x: [T; N],
}
impl<const N: usize, T> V<N, T> {
const LEN: usize = N; // This has generics <N, T>
}
impl Foo for Bar {
const C : usize = 32; // <-
}If options.inline_anon_consts is false, this is also used for inline const blocks and
advanced const generics expressions.
Borrow(ConstantExpr)
A shared reference to a static variable.
RawBorrow
A raw borrow (*const or *mut).
Cast
A cast <source> as <type>, <type> is stored as the type of
the current constant expression. Currently, this is only used
to represent lit as *mut T or lit as *const T, where lit
is a usize literal.
Fields
source: ConstantExprConstRef
Fields
id: ParamConstFnDef(ItemRef)
A function definition, corresponding to a particular item. This is a ZST, unlike FnPtr.
FnPtr(ItemRef)
A function pointer. This is an actual pointer to that function.
Memory(Vec<u8>)
A blob of memory containing the byte representation of the value. This can occur when evaluating MIR constants. Interpreting this back to a structured value is left as an exercice to the consumer.
Todo(String)
Implementations§
Trait Implementations§
Source§impl Clone for ConstantExprKind
impl Clone for ConstantExprKind
Source§fn clone(&self) -> ConstantExprKind
fn clone(&self) -> ConstantExprKind
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ConstantExprKind
impl Debug for ConstantExprKind
Source§impl Hash for ConstantExprKind
impl Hash for ConstantExprKind
Source§impl PartialEq for ConstantExprKind
impl PartialEq for ConstantExprKind
impl Eq for ConstantExprKind
impl StructuralPartialEq for ConstantExprKind
Auto Trait Implementations§
impl Freeze for ConstantExprKind
impl RefUnwindSafe for ConstantExprKind
impl Send for ConstantExprKind
impl Sync for ConstantExprKind
impl Unpin for ConstantExprKind
impl UnwindSafe for ConstantExprKind
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> 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