Module macro_rules

Source

Structs§

DummyExpander 🔒
FirstSets 🔒
MacroRulesMacroExpander 🔒
NoopTracker 🔒
A noop tracker that is used in the hot path of the expansion, has zero overhead thanks to monomorphization.
ParserAnyMacro 🔒
TokenSet 🔒

Enums§

CanRetry 🔒
IsInFollow 🔒
TtHandle 🔒

Traits§

Tracker 🔒

Functions§

check_lhs_no_empty_seq 🔒
Checks that the lhs contains no repetition which could match an empty token tree, because then the matcher would hang indefinitely.
check_lhs_nt_follows 🔒
check_matcher 🔒
check_matcher_core 🔒
check_rhs 🔒
compile_declarative_macro
Converts a macro item into a syntax extension.
expand_macro 🔒
Expands the rules based macro defined by lhses and rhses for a given input arg.
frag_can_be_followed_by_any 🔒
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).
has_compile_error_macro 🔒
is_empty_token_tree 🔒
is_in_follow 🔒
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.
parser_from_cx 🔒
quoted_tt_to_string 🔒
token_can_be_followed_by_any 🔒
trace_macros_note 🔒
try_match_macro 🔒
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.