pub struct GlobalDecl {
pub def_id: GlobalDeclId,
pub item_meta: ItemMeta,
pub generics: GenericParams,
pub ty: Ty,
pub size: Size,
pub align: Size,
pub ptr_metadata: Operand,
pub src: GlobalSource,
pub global_kind: GlobalKind,
pub value: ConstantExpr,
}Expand description
A global variable definition (constant or static).
Fields§
§def_id: GlobalDeclId§item_meta: ItemMetaThe meta data associated with the declaration.
generics: GenericParamsRemark: constants can actually have generic parameters.
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>
}
fn use_v<const N: usize, T>(v: V<N, T>) {
let l = V::<N, T>::LEN; // We need to provided a substitution here
}ty: Ty§size: SizeThe size in bytes of the global’s allocation.
align: SizeThe alignment in bytes of the global’s allocation.
ptr_metadata: OperandThe pointer metadata for references to this global (needed for unsized globals).
src: GlobalSourceThe context of the global: distinguishes normal items from trait-associated items and vtable instances.
global_kind: GlobalKindThe kind of global (static or const).
value: ConstantExprThe value of this constant/static. By default this is a ConstantExprKind::Call to the
initializer function that computes the value (the function uses the same generic parameters
as the global).
Implementations§
Source§impl GlobalDecl
impl GlobalDecl
Sourcepub fn init_fun_id(&self) -> Option<FunDeclId>
pub fn init_fun_id(&self) -> Option<FunDeclId>
If this global’s value is a call to its initializer function, returns the initializer’s id.
Sourcepub fn is_unsafe_to_access(&self, _krate: &TranslatedCrate) -> bool
pub fn is_unsafe_to_access(&self, _krate: &TranslatedCrate) -> bool
Whether this global is unsafe to access, because it is a mutable or unsafe external static (safety.unsafe-static).
Sourcepub fn is_unsafe_to_declare(&self, _krate: &TranslatedCrate) -> bool
pub fn is_unsafe_to_declare(&self, _krate: &TranslatedCrate) -> bool
Whether this global is unsafe to declare.
Trait Implementations§
Source§impl AstVisitable for GlobalDecl
impl AstVisitable for GlobalDecl
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 Clone for GlobalDecl
impl Clone for GlobalDecl
Source§fn clone(&self) -> GlobalDecl
fn clone(&self) -> GlobalDecl
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GlobalDecl
impl Debug for GlobalDecl
Source§impl<'de, __State: ?Sized> DeserializeState<'de, __State> for GlobalDeclwhere
GlobalDeclId: DeserializeState<'de, __State>,
ItemMeta: DeserializeState<'de, __State>,
GenericParams: DeserializeState<'de, __State>,
Ty: DeserializeState<'de, __State>,
Size: DeserializeState<'de, __State>,
Operand: DeserializeState<'de, __State>,
GlobalSource: DeserializeState<'de, __State>,
GlobalKind: DeserializeState<'de, __State>,
ConstantExpr: DeserializeState<'de, __State>,
impl<'de, __State: ?Sized> DeserializeState<'de, __State> for GlobalDeclwhere
GlobalDeclId: DeserializeState<'de, __State>,
ItemMeta: DeserializeState<'de, __State>,
GenericParams: DeserializeState<'de, __State>,
Ty: DeserializeState<'de, __State>,
Size: DeserializeState<'de, __State>,
Operand: DeserializeState<'de, __State>,
GlobalSource: DeserializeState<'de, __State>,
GlobalKind: DeserializeState<'de, __State>,
ConstantExpr: 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 GlobalDeclwhere
V: Visitor + Visit<'s, GlobalDeclId> + Visit<'s, ItemMeta> + Visit<'s, GenericParams> + Visit<'s, Ty> + Visit<'s, Size> + Visit<'s, Operand> + Visit<'s, GlobalSource> + Visit<'s, GlobalKind> + Visit<'s, ConstantExpr>,
impl<'s, V> Drive<'s, V> for GlobalDeclwhere
V: Visitor + Visit<'s, GlobalDeclId> + Visit<'s, ItemMeta> + Visit<'s, GenericParams> + Visit<'s, Ty> + Visit<'s, Size> + Visit<'s, Operand> + Visit<'s, GlobalSource> + Visit<'s, GlobalKind> + Visit<'s, ConstantExpr>,
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 GlobalDeclwhere
V: Visitor + VisitMut<'s, GlobalDeclId> + VisitMut<'s, ItemMeta> + VisitMut<'s, GenericParams> + VisitMut<'s, Ty> + VisitMut<'s, Size> + VisitMut<'s, Operand> + VisitMut<'s, GlobalSource> + VisitMut<'s, GlobalKind> + VisitMut<'s, ConstantExpr>,
impl<'s, V> DriveMut<'s, V> for GlobalDeclwhere
V: Visitor + VisitMut<'s, GlobalDeclId> + VisitMut<'s, ItemMeta> + VisitMut<'s, GenericParams> + VisitMut<'s, Ty> + VisitMut<'s, Size> + VisitMut<'s, Operand> + VisitMut<'s, GlobalSource> + VisitMut<'s, GlobalKind> + VisitMut<'s, ConstantExpr>,
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 GlobalDeclwhere
V: Visitor<Break: Default> + VisitTwo<'s, GlobalDeclId> + VisitTwo<'s, ItemMeta> + VisitTwo<'s, GenericParams> + VisitTwo<'s, Ty> + VisitTwo<'s, Size> + VisitTwo<'s, Operand> + VisitTwo<'s, GlobalSource> + VisitTwo<'s, GlobalKind> + VisitTwo<'s, ConstantExpr>,
impl<'s, V> DriveTwo<'s, V> for GlobalDeclwhere
V: Visitor<Break: Default> + VisitTwo<'s, GlobalDeclId> + VisitTwo<'s, ItemMeta> + VisitTwo<'s, GenericParams> + VisitTwo<'s, Ty> + VisitTwo<'s, Size> + VisitTwo<'s, Operand> + VisitTwo<'s, GlobalSource> + VisitTwo<'s, GlobalKind> + VisitTwo<'s, ConstantExpr>,
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()).Source§impl<C> FmtWithCtx<C> for GlobalDeclwhere
C: AstFormatter,
impl<C> FmtWithCtx<C> for GlobalDeclwhere
C: AstFormatter,
Source§impl<__State: ?Sized> SerializeState<__State> for GlobalDeclwhere
GlobalDeclId: SerializeState<__State>,
ItemMeta: SerializeState<__State>,
GenericParams: SerializeState<__State>,
Ty: SerializeState<__State>,
Size: SerializeState<__State>,
Operand: SerializeState<__State>,
GlobalSource: SerializeState<__State>,
GlobalKind: SerializeState<__State>,
ConstantExpr: SerializeState<__State>,
impl<__State: ?Sized> SerializeState<__State> for GlobalDeclwhere
GlobalDeclId: SerializeState<__State>,
ItemMeta: SerializeState<__State>,
GenericParams: SerializeState<__State>,
Ty: SerializeState<__State>,
Size: SerializeState<__State>,
Operand: SerializeState<__State>,
GlobalSource: SerializeState<__State>,
GlobalKind: SerializeState<__State>,
ConstantExpr: SerializeState<__State>,
fn serialize_state<__S>(
&self,
__state: &__State,
__serializer: __S,
) -> Result<__S::Ok, __S::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for GlobalDecl
impl RefUnwindSafe for GlobalDecl
impl Send for GlobalDecl
impl Sync for GlobalDecl
impl Unpin for GlobalDecl
impl UnsafeUnpin for GlobalDecl
impl UnwindSafe for GlobalDecl
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<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
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
TypeInfo.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.Source§fn collect_regions(&self) -> impl Iterator<Item = Region>
fn collect_regions(&self) -> impl Iterator<Item = Region>
self.