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(),
     }
 }