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.