Parse delimiter before contents
diff --git a/src/expr.rs b/src/expr.rs
index 16b04d9..fbc3033 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1227,7 +1227,7 @@
         mut e: call!(atom_expr, allow_struct, allow_block) >>
         many0!(alt!(
             tap!(args: and_call => {
-                let (args, paren) = args;
+                let (paren, args) = args;
                 e = ExprCall {
                     attrs: Vec::new(),
                     func: Box::new(e),
@@ -1253,11 +1253,11 @@
             })
             |
             tap!(i: and_index => {
-                let (i, token) = i;
+                let (bracket, i) = i;
                 e = ExprIndex {
                     attrs: Vec::new(),
                     expr: Box::new(e),
-                    bracket_token: token,
+                    bracket_token: bracket,
                     index: Box::new(i),
                 }.into();
             })
@@ -1279,7 +1279,7 @@
         mut e: call!(atom_expr, allow_struct, allow_block) >>
         many0!(alt!(
             tap!(args: and_call => {
-                let (args, paren) = args;
+                let (paren, args) = args;
                 e = ExprCall {
                     attrs: Vec::new(),
                     func: Box::new(e),
@@ -1417,8 +1417,8 @@
             e: grouped!(syn!(Expr)) >>
             (ExprGroup {
                 attrs: Vec::new(),
-                expr: Box::new(e.0),
-                group_token: e.1,
+                expr: Box::new(e.1),
+                group_token: e.0,
             })
         ));
     }
@@ -1429,8 +1429,8 @@
             e: parens!(syn!(Expr)) >>
             (ExprParen {
                 attrs: Vec::new(),
-                expr: Box::new(e.0),
-                paren_token: e.1,
+                paren_token: e.0,
+                expr: Box::new(e.1),
             })
         ));
     }
@@ -1441,8 +1441,8 @@
             elems: brackets!(Delimited::parse_terminated) >>
             (ExprArray {
                 attrs: Vec::new(),
-                elems: elems.0,
-                bracket_token: elems.1,
+                bracket_token: elems.0,
+                elems: elems.1,
             })
         ));
 
@@ -1451,7 +1451,7 @@
         }
     }
 
-    named!(and_call -> (Delimited<Expr, Token![,]>, token::Paren),
+    named!(and_call -> (token::Paren, Delimited<Expr, Token![,]>),
            parens!(Delimited::parse_terminated));
 
     #[cfg(feature = "full")]
@@ -1484,8 +1484,8 @@
                     args: fish.2,
                     gt_token: fish.3,
                 }),
-                args: args.0,
-                paren_token: args.1,
+                args: args.1,
+                paren_token: args.0,
                 dot_token: dot,
             }
         })
@@ -1503,8 +1503,8 @@
             elems: parens!(Delimited::parse_terminated) >>
             (ExprTuple {
                 attrs: Vec::new(),
-                elems: elems.0,
-                paren_token: elems.1,
+                elems: elems.1,
+                paren_token: elems.0,
             })
         ));
 
@@ -1530,8 +1530,8 @@
                 eq_token: eq,
                 expr: Box::new(cond),
                 then_branch: Block {
-                    stmts: then_block.0,
-                    brace_token: then_block.1,
+                    brace_token: then_block.0,
+                    stmts: then_block.1,
                 },
                 if_token: if_,
                 else_branch: else_block,
@@ -1554,8 +1554,8 @@
                 attrs: Vec::new(),
                 cond: Box::new(cond),
                 then_branch: Block {
-                    stmts: then_block.0,
-                    brace_token: then_block.1,
+                    brace_token: then_block.0,
+                    stmts: then_block.1,
                 },
                 if_token: if_,
                 else_branch: else_block,
@@ -1580,8 +1580,8 @@
                 (Expr::Block(ExprBlock {
                     attrs: Vec::new(),
                     block: Block {
-                        stmts: else_block.0,
-                        brace_token: else_block.1,
+                        brace_token: else_block.0,
+                        stmts: else_block.1,
                     },
                 }))
             )
@@ -1639,15 +1639,12 @@
             match_: keyword!(match) >>
             obj: expr_no_struct >>
             res: braces!(many0!(Arm::parse)) >>
-            ({
-                let (arms, brace) = res;
-                ExprMatch {
-                    attrs: Vec::new(),
-                    expr: Box::new(obj),
-                    match_token: match_,
-                    brace_token: brace,
-                    arms: arms,
-                }
+            (ExprMatch {
+                attrs: Vec::new(),
+                expr: Box::new(obj),
+                match_token: match_,
+                brace_token: res.0,
+                arms: res.1,
             })
         ));
 
@@ -1897,7 +1894,7 @@
                 (fields, base)
             )) >>
             ({
-                let ((fields, base), brace) = data;
+                let (brace, (fields, base)) = data;
                 let (dots, rest) = match base.and_then(|b| b) {
                     Some((dots, base)) => (Some(dots), Some(base)),
                     None => (None, None),
@@ -1961,10 +1958,10 @@
             )) >>
             (ExprRepeat {
                 attrs: Vec::new(),
-                expr: Box::new((data.0).0),
-                amt: Box::new((data.0).2),
-                bracket_token: data.1,
-                semi_token: (data.0).1,
+                expr: Box::new((data.1).0),
+                amt: Box::new((data.1).2),
+                bracket_token: data.0,
+                semi_token: (data.1).1,
             })
         ));
 
@@ -2052,15 +2049,15 @@
     #[cfg(feature = "full")]
     named!(and_field -> (Token![.], Member), tuple!(punct!(.), syn!(Member)));
 
-    named!(and_index -> (Expr, token::Bracket), brackets!(syn!(Expr)));
+    named!(and_index -> (token::Bracket, Expr), brackets!(syn!(Expr)));
 
     #[cfg(feature = "full")]
     impl Synom for Block {
         named!(parse -> Self, do_parse!(
             stmts: braces!(Block::parse_within) >>
             (Block {
-                stmts: stmts.0,
-                brace_token: stmts.1,
+                brace_token: stmts.0,
+                stmts: stmts.1,
             })
         ));
 
@@ -2130,8 +2127,8 @@
             mac: Macro {
                 path: what,
                 bang_token: bang,
-                delimiter: MacroDelimiter::Brace(data.1),
-                tts: data.0,
+                delimiter: MacroDelimiter::Brace(data.0),
+                tts: data.1,
             },
             semi_token: semi,
         }))))
@@ -2302,9 +2299,9 @@
             )) >>
             (PatStruct {
                 path: path,
-                fields: (data.0).0,
-                brace_token: data.1,
-                dot2_token: (data.0).1.and_then(|m| m),
+                fields: (data.1).0,
+                brace_token: data.0,
+                dot2_token: (data.1).1.and_then(|m| m),
             })
         ));
 
@@ -2420,7 +2417,7 @@
                 (front, dotdot, back)
             )) >>
             ({
-                let ((front, dotdot, back), parens) = data;
+                let (parens, (front, dotdot, back)) = data;
                 let (dotdot, trailing) = match dotdot {
                     Some((a, b)) => (Some(a), Some(b)),
                     None => (None, None),
@@ -2532,7 +2529,7 @@
                 ) >>
                 (before, middle, after)
             )),
-            |((before, middle, after), brackets)| {
+            |(brackets, (before, middle, after))| {
                 let mut before: Delimited<Pat, Token![,]> = before;
                 let after: Option<Delimited<Pat, Token![,]>> = after;
                 let middle: Option<(Token![..], Option<Token![,]>)> = middle;