add some examples to comments in mbe code
This commit is contained in:
parent
c42d846add
commit
88b99224c1
@ -345,6 +345,38 @@ fn initial_matcher_pos<'root, 'tt>(ms: &'tt [TokenTree]) -> MatcherPos<'root, 't
|
|||||||
/// token tree. The depth of the `NamedMatch` structure will therefore depend
|
/// token tree. The depth of the `NamedMatch` structure will therefore depend
|
||||||
/// only on the nesting depth of `ast::TTSeq`s in the originating
|
/// only on the nesting depth of `ast::TTSeq`s in the originating
|
||||||
/// token tree it was derived from.
|
/// token tree it was derived from.
|
||||||
|
///
|
||||||
|
/// In layman'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...
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// macro_rules! foo {
|
||||||
|
/// ($($($x:ident),+);+) => {}
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// foo!(a, b, c, d; a, b, c, d, e);
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// Then, the tree will have the following shape:
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// MatchedSeq([
|
||||||
|
/// MatchedSeq([
|
||||||
|
/// MatchedNonterminal(a),
|
||||||
|
/// MatchedNonterminal(b),
|
||||||
|
/// MatchedNonterminal(c),
|
||||||
|
/// MatchedNonterminal(d),
|
||||||
|
/// ]),
|
||||||
|
/// MatchedSeq([
|
||||||
|
/// MatchedNonterminal(a),
|
||||||
|
/// MatchedNonterminal(b),
|
||||||
|
/// MatchedNonterminal(c),
|
||||||
|
/// MatchedNonterminal(d),
|
||||||
|
/// MatchedNonterminal(e),
|
||||||
|
/// ])
|
||||||
|
/// ])
|
||||||
|
/// ```
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
crate enum NamedMatch {
|
crate enum NamedMatch {
|
||||||
MatchedSeq(Lrc<NamedMatchVec>),
|
MatchedSeq(Lrc<NamedMatchVec>),
|
||||||
|
@ -358,6 +358,12 @@ fn with(self, other: LockstepIterSize) -> LockstepIterSize {
|
|||||||
/// Note that if `repeats` does not match the exact correct depth of a meta-var,
|
/// Note that if `repeats` does not match the exact correct depth of a meta-var,
|
||||||
/// `lookup_cur_matched` will return `None`, which is why this still works even in the presence of
|
/// `lookup_cur_matched` will return `None`, which is why this still works even in the presence of
|
||||||
/// multiple nested matcher sequences.
|
/// multiple nested matcher sequences.
|
||||||
|
///
|
||||||
|
/// Example: `$($($x $y)+*);+` -- we need to make sure that `x` and `y` repeat the same amount as
|
||||||
|
/// each other at the given depth when the macro was invoked. If they don't it might mean they were
|
||||||
|
/// declared at unequal depths or there was a compile bug. For example, if we have 3 repetitions of
|
||||||
|
/// the outer sequence and 4 repetitions of the inner sequence for `x`, we should have the same for
|
||||||
|
/// `y`; otherwise, we can't transcribe them both at the given depth.
|
||||||
fn lockstep_iter_size(
|
fn lockstep_iter_size(
|
||||||
tree: &mbe::TokenTree,
|
tree: &mbe::TokenTree,
|
||||||
interpolations: &FxHashMap<MacroRulesNormalizedIdent, NamedMatch>,
|
interpolations: &FxHashMap<MacroRulesNormalizedIdent, NamedMatch>,
|
||||||
|
Loading…
Reference in New Issue
Block a user