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;