Struct rustc_span::hygiene::ExpnData [−][src]
pub struct ExpnData {
pub kind: ExpnKind,
pub parent: ExpnId,
pub call_site: Span,
disambiguator: u32,
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>,
pub parent_module: Option<DefId>,
}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: ExpnKindThe kind of this expansion - macro or compiler desugaring.
parent: ExpnIdThe expansion that produced this expansion.
call_site: SpanThe 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.
disambiguator: u32Used 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.
def_site: SpanThe 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]>>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: boolWhether the macro is allowed to use unsafe internally
even if the user crate has #![forbid(unsafe_code)].
local_inner_macros: boolEnables the macro helper hack (ident!(...) -> $crate::ident!(...))
for a given macro.
edition: EditionEdition of the crate in which the macro is defined.
macro_def_id: Option<DefId>The DefId of the macro being invoked,
if this ExpnData corresponds to a macro invocation
parent_module: Option<DefId>The normal module (mod) in which the expanded macro was defined.
Implementations
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>,
parent_module: Option<DefId>
) -> ExpnData
Constructs expansion data with default properties.
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for ExpnData
impl UnwindSafe for ExpnData
Blanket Implementations
Mutably borrows from an owned value. Read more
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 72 bytes