Struct rustc_span::hygiene::ExpnData [−][src]
pub struct ExpnData {
pub kind: ExpnKind,
pub parent: ExpnId,
pub call_site: Span,
pub def_site: Span,
pub allow_internal_unstable: Option<Lrc<[Symbol]>>,
pub allow_internal_unsafe: bool,
pub local_inner_macros: bool,
pub edition: Edition,
pub macro_def_id: Option<DefId>,
krate: CrateNum,
orig_id: Option<u32>,
disambiguator: u32,
}Expand description
A subset of properties from both macro definition and macro call available through global data. Avoid using this if you have access to the original definition or call structures.
Fields
kind: ExpnKindExpand description
The kind of this expansion - macro or compiler desugaring.
parent: ExpnIdExpand description
The expansion that produced this expansion.
call_site: SpanExpand description
The location of the actual macro invocation or syntax sugar , e.g.
let x = foo!(); or if let Some(y) = x {}
This may recursively refer to other macro invocations, e.g., if
foo!() invoked bar!() internally, and there was an
expression inside bar!; the call_site of the expression in
the expansion would point to the bar! invocation; that
call_site span would have its own ExpnData, with the call_site
pointing to the foo! invocation.
def_site: SpanExpand description
The span of the macro definition (possibly dummy). This span serves only informational purpose and is not used for resolution.
allow_internal_unstable: Option<Lrc<[Symbol]>>Expand description
List of #[unstable]/feature-gated features that the macro is allowed to use
internally without forcing the whole crate to opt-in
to them.
allow_internal_unsafe: boolExpand description
Whether the macro is allowed to use unsafe internally
even if the user crate has #![forbid(unsafe_code)].
local_inner_macros: boolExpand description
Enables the macro helper hack (ident!(...) -> $crate::ident!(...))
for a given macro.
edition: EditionExpand description
Edition of the crate in which the macro is defined.
macro_def_id: Option<DefId>Expand description
The DefId of the macro being invoked,
if this ExpnData corresponds to a macro invocation
krate: CrateNumExpand description
The crate that originally created this ExpnData. During
metadata serialization, we only encode ExpnDatas that were
created locally - when our serialized metadata is decoded,
foreign ExpnIds will have their ExpnData looked up
from the crate specified by `Crate
orig_id: Option<u32>Expand description
The raw that this ExpnData had in its original crate.
An ExpnData can be created before being assigned an ExpnId,
so this might be None until set_expn_data is called
disambiguator: u32Expand description
Used to force two ExpnDatas to have different Fingerprints.
Due to macro expansion, it’s possible to end up with two ExpnIds
that have identical ExpnDatas. This violates the contract of HashStable
- the two
ExpnIds are not equal, but theirFingerprints are equal (since the numericalExpnIdvalue is not considered by theHashStableimplementation).
The disambiguator field is set by update_disambiguator when two distinct
ExpnIds would end up with the same Fingerprint. Since ExpnData includes
a krate field, this value only needs to be unique within a single crate.
Implementations
impl ExpnData[src]
impl ExpnData[src]pub fn new(
kind: ExpnKind,
parent: ExpnId,
call_site: Span,
def_site: Span,
allow_internal_unstable: Option<Lrc<[Symbol]>>,
allow_internal_unsafe: bool,
local_inner_macros: bool,
edition: Edition,
macro_def_id: Option<DefId>
) -> ExpnData[src]
kind: ExpnKind,
parent: ExpnId,
call_site: Span,
def_site: Span,
allow_internal_unstable: Option<Lrc<[Symbol]>>,
allow_internal_unsafe: bool,
local_inner_macros: bool,
edition: Edition,
macro_def_id: Option<DefId>
) -> ExpnData
pub fn default(
kind: ExpnKind,
call_site: Span,
edition: Edition,
macro_def_id: Option<DefId>
) -> ExpnData[src]
pub fn default(
kind: ExpnKind,
call_site: Span,
edition: Edition,
macro_def_id: Option<DefId>
) -> ExpnData[src]Constructs expansion data with default properties.
pub fn allow_unstable(
kind: ExpnKind,
call_site: Span,
edition: Edition,
allow_internal_unstable: Lrc<[Symbol]>,
macro_def_id: Option<DefId>
) -> ExpnData[src]
kind: ExpnKind,
call_site: Span,
edition: Edition,
allow_internal_unstable: Lrc<[Symbol]>,
macro_def_id: Option<DefId>
) -> ExpnData
pub fn is_root(&self) -> bool[src]
Trait Implementations
impl<__CTX> HashStable<__CTX> for ExpnData where
__CTX: HashStableContext, [src]
impl<__CTX> HashStable<__CTX> for ExpnData where
__CTX: HashStableContext, [src]fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)[src]
Auto Trait Implementations
impl !RefUnwindSafe for ExpnData
impl !Send for ExpnData
impl !Sync for ExpnData
impl Unpin for ExpnData
impl UnwindSafe for ExpnData
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]pub fn borrow_mut(&mut self) -> &mut T[src]
pub fn borrow_mut(&mut self) -> &mut T[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone, [src]
impl<T> ToOwned for T where
T: Clone, [src]type Owned = T
type Owned = TThe resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn to_owned(&self) -> T[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)[src]
pub fn clone_into(&self, target: &mut T)[src]🔬 This is a nightly-only experimental API. (toowned_clone_into)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more