Module rustc_expand::mbe::macro_rules
source · Structs
A noop tracker that is used in the hot path of the expansion, has zero overhead thanks to monomorphization.
TokenSet 🔒
Enums
Traits
Tracker 🔒
Functions
Checks that the lhs contains no repetition which could match an empty token
tree, because then the matcher would hang indefinitely.
Converts a macro item into a syntax extension.
Expands the rules based macro defined by
lhses
and rhses
for a given
input arg
.Returns
true
if a fragment of type frag
can be followed by any sort of
token. We use this (among other things) as a useful approximation
for when frag
can be followed by a repetition like $(...)*
or
$(...)+
. In general, these can be a bit tricky to reason about,
so we adopt a conservative position that says that any fragment
specifier which consumes at most one token tree can be followed by
a fragment specifier (indeed, these fragments can be followed by
ANYTHING without fear of future compatibility hazards).Returns
true
if frag
can legally be followed by the token tok
. For
fragments that can consume an unbounded number of tokens, tok
must be within a well-defined follow set. This is intended to
guarantee future compatibility: for example, without this rule, if
we expanded expr
to include a new binary operator, we might
break macros that were relying on that binary operator as a
separator.Try expanding the macro. Returns the index of the successful arm and its named_matches if it was successful,
and nothing if it failed. On failure, it’s the callers job to use
track
accordingly to record all errors
correctly.