Struct rustc_span::hygiene::ExpnId
source · pub struct ExpnId {
pub krate: CrateNum,
pub local_id: ExpnIndex,
}
Expand description
A unique ID associated with a macro invocation and expansion.
Fields§
§krate: CrateNum
§local_id: ExpnIndex
Implementations§
source§impl ExpnId
impl ExpnId
sourcepub const fn root() -> ExpnId
pub const fn root() -> ExpnId
The ID of the theoretical expansion that generates freshly parsed, unexpanded AST. Invariant: we do not create any ExpnId with local_id == 0 and krate != 0.
pub fn expn_hash(self) -> ExpnHash
pub fn from_hash(hash: ExpnHash) -> Option<ExpnId>
pub fn as_local(self) -> Option<LocalExpnId>
pub fn expect_local(self) -> LocalExpnId
pub fn expn_data(self) -> ExpnData
pub fn is_descendant_of(self, ancestor: ExpnId) -> bool
sourcepub fn outer_expn_is_descendant_of(self, ctxt: SyntaxContext) -> bool
pub fn outer_expn_is_descendant_of(self, ctxt: SyntaxContext) -> bool
expn_id.outer_expn_is_descendant_of(ctxt)
is equivalent to but faster than
expn_id.is_descendant_of(ctxt.outer_expn())
.
sourcepub fn expansion_cause(self) -> Option<Span>
pub fn expansion_cause(self) -> Option<Span>
Returns span for the macro which originally caused this expansion to happen.
Stops backtracing at include! boundary.
Trait Implementations§
source§impl<CTX: HashStableContext> HashStable<CTX> for ExpnId
impl<CTX: HashStableContext> HashStable<CTX> for ExpnId
fn hash_stable(&self, ctx: &mut CTX, hasher: &mut StableHasher)
source§impl PartialEq<ExpnId> for ExpnId
impl PartialEq<ExpnId> for ExpnId
impl Copy for ExpnId
impl Eq for ExpnId
impl StructuralEq for ExpnId
impl StructuralPartialEq for ExpnId
Auto Trait Implementations§
impl RefUnwindSafe for ExpnId
impl Send for ExpnId
impl Sync for ExpnId
impl Unpin for ExpnId
impl UnwindSafe for ExpnId
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
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: 8 bytes