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

The kind of this expansion - macro or compiler desugaring.

parent: ExpnId
Expand description

The expansion that produced this expansion.

call_site: Span
Expand 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: Span
Expand 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: bool
Expand description

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

local_inner_macros: bool
Expand description

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

edition: Edition
Expand 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: CrateNum
Expand 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: u32
Expand 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 their Fingerprints are equal (since the numerical ExpnId value is not considered by the HashStable implementation).

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]

fn clone(&self) -> ExpnData[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl Debug for ExpnData[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

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

fn decode(__decoder: &mut __D) -> Result<Self, <__D as Decoder>::Error>[src]

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

fn encode(&self, __encoder: &mut __E) -> Result<(), <__E as Encoder>::Error>[src]

impl !Hash for ExpnData[src]

fn hash<H>(&self, state: &mut H) where
    H: Hasher, 
1.0.0[src]

Feeds this value into the given Hasher. Read more

fn hash_slice<H>(data: &[Self], state: &mut H) where
    H: Hasher, 
1.3.0[src]

Feeds a slice of this type into the given Hasher. Read more

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

fn hash_stable(&self, __hcx: &mut __CTX, __hasher: &mut StableHasher)[src]

impl !PartialEq<ExpnData> for ExpnData[src]

#[must_use]
fn eq(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests for self and other values to be equal, and is used by ==. Read more

#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests for !=.

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]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

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

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

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

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

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

pub fn from(t: T) -> T[src]

Performs the conversion.

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

pub fn into(self) -> U[src]

Performs the conversion.

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

type Owned = T

The resulting type after obtaining ownership.

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]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

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.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

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.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.