Enum rustc_expand::mbe::macro_parser::NamedMatch
source · pub(crate) enum NamedMatch {
MatchedSeq(Vec<NamedMatch>),
MatchedSingle(ParseNtResult),
}
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§
MatchedSeq(Vec<NamedMatch>)
MatchedSingle(ParseNtResult)
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 Freeze for NamedMatch
impl !RefUnwindSafe for NamedMatch
impl !Send for NamedMatch
impl !Sync for NamedMatch
impl Unpin for NamedMatch
impl !UnwindSafe for NamedMatch
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
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 bytesMatchedSingle
: 32 bytes