Module rustc_resolve::macros
source Β· Expand description
A bunch of methods and structures more or less related to resolving macros and
interface provided by Resolver
to macro expander.
Structs§
- MacroRulesBinding πBinding produced by a
macro_rules
item. Not modularized, can shadow previousmacro_rules
bindings, etc.
Enums§
- MacroRulesScope πThe scope introduced by a
macro_rules!
macro. This starts at the macroβs definition and ends at the end of the macroβs parent module (named or unnamed), or even further if it escapes with#[macro_use]
. Some macro invocations need to introducemacro_rules
scopes too because they can potentially expand into macro definitions.
Functions§
- fast_print_path π
- registered_tools π
- sub_namespace_match πMacro namespace is separated into two sub-namespaces, one for bang macros and one for attribute-like macros (attributes, derives). We ignore resolutions from one sub-namespace when searching names in scope for another.
Type Aliases§
- MacroRulesScopeRef π
macro_rules!
scopes are always kept by reference and inside a cell. The reason is that we update scopes with valueMacroRulesScope::Invocation(invoc_id)
in-place afterinvoc_id
gets expanded. This helps to avoid uncontrollable growth ofmacro_rules!
scope chains, which usually grow linearly with the number of macro invocations in a module (including derives) and hurt performance. - Res π