X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=crates%2Fmbe%2Fsrc%2Fparser.rs;h=f891ec29c6e80b1dacf5fb88b6aac9a74de23da2;hb=438b34dceede1cf0bebef9309d90ab6a3bde5002;hp=b90ae7015db7c811a5e97bed9165855cd14f4035;hpb=e7108fb5b198d4fe416ce2408afaa86f1020c37d;p=rust.git diff --git a/crates/mbe/src/parser.rs b/crates/mbe/src/parser.rs index b90ae7015db..f891ec29c6e 100644 --- a/crates/mbe/src/parser.rs +++ b/crates/mbe/src/parser.rs @@ -3,15 +3,16 @@ use smallvec::SmallVec; use syntax::SmolStr; +use tt::Delimiter; use crate::{tt_iter::TtIter, MetaTemplate, ParseError}; #[derive(Clone, Debug, PartialEq, Eq)] pub(crate) enum Op { Var { name: SmolStr, kind: Option, id: tt::TokenId }, - Repeat { subtree: MetaTemplate, kind: RepeatKind, separator: Option }, + Repeat { tokens: MetaTemplate, kind: RepeatKind, separator: Option }, Leaf(tt::Leaf), - Subtree(MetaTemplate), + Subtree { tokens: MetaTemplate, delimiter: Option }, } #[derive(Copy, Clone, Debug, PartialEq, Eq)] @@ -92,12 +93,10 @@ fn next_op<'a>(first: &tt::TokenTree, src: &mut TtIter<'a>, mode: Mode) -> Resul match second { tt::TokenTree::Subtree(subtree) => { let (separator, kind) = parse_repeat(src)?; - let delimiter = subtree.delimiter; let tokens = parse_inner(&subtree, mode) .into_iter() .collect::, ParseError>>()?; - let subtree = MetaTemplate { tokens, delimiter }; - Op::Repeat { subtree, separator, kind } + Op::Repeat { tokens: MetaTemplate(tokens), separator, kind } } tt::TokenTree::Leaf(leaf) => match leaf { tt::Leaf::Punct(punct) => { @@ -136,12 +135,9 @@ fn next_op<'a>(first: &tt::TokenTree, src: &mut TtIter<'a>, mode: Mode) -> Resul } tt::TokenTree::Leaf(tt) => Op::Leaf(tt.clone()), tt::TokenTree::Subtree(subtree) => { - let delimiter = subtree.delimiter; let tokens = parse_inner(&subtree, mode).into_iter().collect::, ParseError>>()?; - - let subtree = MetaTemplate { tokens, delimiter }; - Op::Subtree(subtree) + Op::Subtree { tokens: MetaTemplate(tokens), delimiter: subtree.delimiter } } }; Ok(res)