Separate delimiter and tokenstream in macro ast
diff --git a/src/tt.rs b/src/tt.rs
index db22284..b0952a0 100644
--- a/src/tt.rs
+++ b/src/tt.rs
@@ -1,48 +1,55 @@
-use proc_macro2::{TokenNode, TokenTree};
+use proc_macro2::{TokenNode, TokenStream, TokenTree, Delimiter};
use cursor::Cursor;
use parse_error;
use synom::PResult;
+use MacroDelimiter;
+use token::{Paren, Brace, Bracket};
-#[cfg(feature = "full")]
-use proc_macro2::Delimiter;
-
-pub fn delimited(input: Cursor) -> PResult<TokenTree> {
+pub fn delimited(input: Cursor) -> PResult<(MacroDelimiter, TokenStream)> {
match input.token_tree() {
Some((
rest,
- token @ TokenTree {
- kind: TokenNode::Group(..),
- ..
+ TokenTree {
+ span,
+ kind: TokenNode::Group(delimiter, tts),
},
- )) => Ok((rest, token)),
+ )) => {
+ let delimiter = match delimiter {
+ Delimiter::Parenthesis => MacroDelimiter::Paren(Paren(span)),
+ Delimiter::Brace => MacroDelimiter::Brace(Brace(span)),
+ Delimiter::Bracket => MacroDelimiter::Bracket(Bracket(span)),
+ Delimiter::None => return parse_error(),
+ };
+ Ok((rest, (delimiter, tts)))
+ }
_ => parse_error(),
}
}
#[cfg(feature = "full")]
-pub fn braced(input: Cursor) -> PResult<TokenTree> {
+pub fn braced(input: Cursor) -> PResult<(Brace, TokenStream)> {
match input.token_tree() {
Some((
rest,
- token @ TokenTree {
- kind: TokenNode::Group(Delimiter::Brace, ..),
- ..
+ TokenTree {
+ span,
+ kind: TokenNode::Group(Delimiter::Brace, tts),
},
- )) => Ok((rest, token)),
+ )) => Ok((rest, (Brace(span), tts))),
_ => parse_error(),
}
}
#[cfg(feature = "full")]
-pub fn parenthesized(input: Cursor) -> PResult<TokenTree> {
+pub fn parenthesized(input: Cursor) -> PResult<(Paren, TokenStream)> {
match input.token_tree() {
Some((
rest,
- token @ TokenTree {
- kind: TokenNode::Group(Delimiter::Parenthesis, ..),
- ..
+ TokenTree {
+ span,
+ kind: TokenNode::Group(Delimiter::Parenthesis, tts),
},
- )) => Ok((rest, token)),
+ )) => Ok((rest, (Paren(span), tts))),
_ => parse_error(),
}
}