Enum rustc_expand::mbe::macro_parser::NamedMatch
source · pub(crate) enum NamedMatch {
MatchedSeq(Vec<NamedMatch>),
MatchedTokenTree(TokenTree),
MatchedNonterminal(Lrc<Nonterminal>),
}
Expand description
NamedMatch
is a pattern-match result for a single metavar. All
MatchedNonterminal
s in the NamedMatch
have the same non-terminal type
(expr, item, etc).
The in-memory structure of a particular NamedMatch
represents the match
that occurred when a particular subset of a matcher was applied to a
particular token tree.
The width of each MatchedSeq
in the NamedMatch
, and the identity of
the MatchedNtNonTts
s, will depend on the token tree it was applied
to: each MatchedSeq
corresponds to a single repetition in the originating
token tree. The depth of the NamedMatch
structure will therefore depend
only on the nesting depth of repetitions in the originating token tree it
was derived from.
In layperson’s terms: NamedMatch
will form a tree representing nested matches of a particular
meta variable. For example, if we are matching the following macro against the following
invocation…
macro_rules! foo {
($($($x:ident),+);+) => {}
}
foo!(a, b, c, d; a, b, c, d, e);
Then, the tree will have the following shape:
MatchedSeq([
MatchedSeq([
MatchedNonterminal(a),
MatchedNonterminal(b),
MatchedNonterminal(c),
MatchedNonterminal(d),
]),
MatchedSeq([
MatchedNonterminal(a),
MatchedNonterminal(b),
MatchedNonterminal(c),
MatchedNonterminal(d),
MatchedNonterminal(e),
])
])
Variants§
Trait Implementations§
source§impl Clone for NamedMatch
impl Clone for NamedMatch
source§fn clone(&self) -> NamedMatch
fn clone(&self) -> NamedMatch
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for NamedMatch
impl !Send for NamedMatch
impl !Sync for NamedMatch
impl Unpin for NamedMatch
impl !UnwindSafe for NamedMatch
Blanket Implementations§
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 32 bytes
Size for each variant:
MatchedSeq
: 32 bytesMatchedTokenTree
: 32 bytesMatchedNonterminal
: 16 bytes