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,
}

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: ExpnKind

The kind of this expansion - macro or compiler desugaring.

parent: ExpnId

The expansion that produced this expansion.

call_site: Span

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: Span

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]>>

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: bool

Whether the macro is allowed to use unsafe internally even if the user crate has #![forbid(unsafe_code)].

local_inner_macros: bool

Enables the macro helper hack (ident!(...) -> $crate::ident!(...)) for a given macro.

edition: Edition

Edition 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

krate: CrateNum

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>

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: u32

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 constract of HashStable

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]

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]

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]

pub fn is_root(&self) -> bool[src]

Trait Implementations

impl Clone for ExpnData[src]

impl Debug for ExpnData[src]

impl<__D: Decoder> Decodable<__D> for ExpnData[src]

impl<__E: Encoder> Encodable<__E> for ExpnData[src]

impl !Hash for ExpnData[src]

impl<__CTX> HashStable<__CTX> for ExpnData where
    __CTX: HashStableContext, 
[src]

impl !PartialEq<ExpnData> for ExpnData[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> Any for T where
    T: 'static + ?Sized, 
[src]

impl<T> Borrow<T> for T where
    T: ?Sized, 
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized, 
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone, 
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.