Expand description
Machinery for hygienic macros.
Inspired by Matthew Flatt et al., โMacros That Work Together: Compile-Time Bindings, Partial Expansion, and Definition Contexts,โ Journal of Functional Programming 22, no. 2 (March 1, 2012): 181โ216, https://doi.org/10.1017/S0956796812000093.
Structsยง
- 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.
- A unique hash value associated to an expansion.
- A unique ID associated with a macro invocation and expansion.
- A unique ID associated with a macro invocation and expansion.
- Hygiene
Data ๐ - Additional information used to assist in decoding hygiene data
- Additional information used to assist in decoding hygiene data
- A unique ID associated with a macro invocation and expansion.
- A
SyntaxContext
represents a chain of pairs(ExpnId, Transparency)
named โmarksโ.
Enumsยง
- The kind of AST transform.
- The kind of compiler desugaring.
- Expansion kind.
- The kind of macro invocation or definition.
- A property of a macro expansion that determines how identifiers produced by that expansion are resolved.
Functionsยง
- Assert that the provided
HashStableContext
is configured with the โdefaultโHashingControls
. We should always have bailed out before getting to here with a non-default mode. With this check in place, we can avoid the need to maintain separate versions ofExpnData
hashes for each permutation ofHashingControls
settings. - Decode an expansion from the metadata of a foreign crate.
- for_
all_ ๐ctxts_ in - for_
all_ ๐expns_ in - Register an expansion which has been decoded from the metadata of a foreign crate.
- Register an expansion which has been decoded from the on-disk-cache for the local crate.
- update_
disambiguator ๐Updates thedisambiguator
field of the correspondingExpnData
such that theFingerprint
of theExpnData
does not collide with any otherExpnIds
. - In order to have good line stepping behavior in debugger, for the given span we return its outermost macro call site that still has a
#[collapse_debuginfo(yes)]
property on it. We also stop walking call sites at the function body level because no line stepping can occur at the level above that. The returned span can then be used in emitted debuginfo.