[−][src]Module rustc_expand::mbe::macro_rules

Structs

FirstSets
MacroRulesMacroExpander
ParserAnyMacro
TokenSet

Enums

IsInFollow

Functions

annotate_err_with_kind
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.

emit_frag_parse_err
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).

generic_extension

Given lhses and rhses, this is the new macro we create

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.

macro_rules_dummy_expander
parse_failure_msg

Generates an appropriate parsing failure message. For EOF, this is "unexpected end...". For other tokens, this is "unexpected token...".

parser_from_cx
quoted_tt_to_string
suggest_slice_pat

Instead of e.g. vec![a, b, c] in a pattern context, suggest [a, b, c].

token_can_be_followed_by_any
trace_macros_note