Fix the rule for trailing comma in match statements
diff --git a/src/expr.rs b/src/expr.rs
index 8ebb28b..5784a73 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -583,26 +583,44 @@
         keyword!("match") >>
         obj: expr_no_struct >>
         punct!("{") >>
-        arms: many0!(do_parse!(
-            attrs: many0!(outer_attr) >>
-            pats: separated_nonempty_list!(punct!("|"), pat) >>
-            guard: option!(preceded!(keyword!("if"), expr)) >>
-            punct!("=>") >>
-            body: alt!(
-                map!(block, |blk| Expr::Block(BlockCheckMode::Default, blk))
-                |
-                expr
-            ) >>
-            option!(punct!(",")) >>
-            (Arm {
-                attrs: attrs,
-                pats: pats,
-                guard: guard.map(Box::new),
-                body: Box::new(body),
-            })
+        mut arms: many0!(do_parse!(
+            arm: match_arm >>
+            cond!(arm_requires_comma(&arm), punct!(",")) >>
+            cond!(!arm_requires_comma(&arm), option!(punct!(","))) >>
+            (arm)
         )) >>
+        last_arm: option!(match_arm) >>
         punct!("}") >>
-        (Expr::Match(Box::new(obj), arms))
+        (Expr::Match(Box::new(obj), {
+            arms.extend(last_arm);
+            arms
+        }))
+    ));
+
+    fn arm_requires_comma(arm: &Arm) -> bool {
+        if let Expr::Block(BlockCheckMode::Default, _) = *arm.body {
+            false
+        } else {
+            true
+        }
+    }
+
+    named!(match_arm -> Arm, do_parse!(
+        attrs: many0!(outer_attr) >>
+        pats: separated_nonempty_list!(punct!("|"), pat) >>
+        guard: option!(preceded!(keyword!("if"), expr)) >>
+        punct!("=>") >>
+        body: alt!(
+            map!(block, |blk| Expr::Block(BlockCheckMode::Default, blk))
+            |
+            expr
+        ) >>
+        (Arm {
+            attrs: attrs,
+            pats: pats,
+            guard: guard.map(Box::new),
+            body: Box::new(body),
+        })
     ));
 
     named_ambiguous_expr!(expr_closure -> Expr, allow_struct, do_parse!(
@@ -1330,7 +1348,7 @@
             tokens.append("=>");
             self.body.to_tokens(tokens);
             match *self.body {
-                Expr::Block(_, _) => {
+                Expr::Block(BlockCheckMode::Default, _) => {
                     // no comma
                 }
                 _ => tokens.append(","),