Large test case
diff --git a/src/expr.rs b/src/expr.rs
index 8a41b42..a48b59b 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1119,7 +1119,7 @@
                     tokens.append("match");
                     expr.to_tokens(tokens);
                     tokens.append("{");
-                    tokens.append_separated(arms, ",");
+                    tokens.append_all(arms);
                     tokens.append("}");
                 }
                 Expr::Closure(capture, ref decl, ref body) => {
diff --git a/src/mac.rs b/src/mac.rs
index 7377fd5..c1b9a5d 100644
--- a/src/mac.rs
+++ b/src/mac.rs
@@ -157,6 +157,10 @@
     named!(token -> Token, alt!(
         punct!("_") => { |_| Token::Underscore }
         |
+        punct!("&&") => { |_| Token::AndAnd } // must be before bin_op
+        |
+        punct!("||") => { |_| Token::OrOr } // must be before bin_op
+        |
         map!(bin_op_eq, Token::BinOpEq)
         |
         map!(bin_op, Token::BinOp)
@@ -177,10 +181,6 @@
         |
         punct!(">=") => { |_| Token::Ge }
         |
-        punct!("&&") => { |_| Token::AndAnd }
-        |
-        punct!("||") => { |_| Token::OrOr }
-        |
         punct!("::") => { |_| Token::ModSep }
         |
         punct!("->") => { |_| Token::RArrow }