rustc_span::hygiene

Struct ExpnData

source
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 edition: Edition,
    pub macro_def_id: Option<DefId>,
    pub parent_module: Option<DefId>,
    pub(crate) allow_internal_unsafe: bool,
    pub local_inner_macros: bool,
    pub(crate) collapse_debuginfo: bool,
}
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

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.

§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 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.

§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.

§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

§parent_module: Option<DefId>

The normal module (mod) in which the expanded macro was defined.

§allow_internal_unsafe: bool

Suppresses the unsafe_code lint for code produced by this macro.

§local_inner_macros: bool

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

§collapse_debuginfo: bool

Should debuginfo for the macro be collapsed to the outermost expansion site (in other words, was the macro definition annotated with #[collapse_debuginfo])?

Implementations§

source§

impl ExpnData

source

pub fn new( kind: ExpnKind, parent: ExpnId, call_site: Span, def_site: Span, allow_internal_unstable: Option<Lrc<[Symbol]>>, edition: Edition, macro_def_id: Option<DefId>, parent_module: Option<DefId>, allow_internal_unsafe: bool, local_inner_macros: bool, collapse_debuginfo: bool, ) -> ExpnData

source

pub fn default( kind: ExpnKind, call_site: Span, edition: Edition, macro_def_id: Option<DefId>, parent_module: Option<DefId>, ) -> ExpnData

Constructs expansion data with default properties.

source

pub fn allow_unstable( kind: ExpnKind, call_site: Span, edition: Edition, allow_internal_unstable: Lrc<[Symbol]>, macro_def_id: Option<DefId>, parent_module: Option<DefId>, ) -> ExpnData

source

pub fn is_root(&self) -> bool

source

fn hash_expn(&self, ctx: &mut impl HashStableContext) -> Hash64

Trait Implementations§

source§

impl Clone for ExpnData

source§

fn clone(&self) -> ExpnData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ExpnData

source§

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

Formats the value using the given formatter. Read more
source§

impl<__D: SpanDecoder> Decodable<__D> for ExpnData

source§

fn decode(__decoder: &mut __D) -> Self

source§

impl<__E: SpanEncoder> Encodable<__E> for ExpnData

source§

fn encode(&self, __encoder: &mut __E)

source§

impl<__CTX> HashStable<__CTX> for ExpnData
where __CTX: HashStableContext,

source§

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

source§

impl !Hash for ExpnData

source§

impl !PartialEq for ExpnData

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

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

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

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

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

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