A bunch of methods and structures more or less related to resolving macros and
interface provided by
Resolver to macro expander.
Binding produced by a
Not modularized, can shadow previous
macro_rules bindings, etc.
The scope introduced by a
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
Some macro invocations need to introduce
macro_rules scopes too because they
can potentially expand into macro definitions.
The code common between processing
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.
macro_rules! scopes are always kept by reference and inside a cell.
The reason is that we update scopes with value
invoc_id gets expanded.
This helps to avoid uncontrollable growth of
macro_rules! scope chains,
which usually grow linearly with the number of macro invocations
in a module (including derives) and hurt performance.