Avoid recompiling the implementation of many0 so much
diff --git a/src/expr.rs b/src/expr.rs
index 6f81edb..6af15fc 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -1452,7 +1452,7 @@
         named!(parse -> Self, do_parse!(
             match_: keyword!(match) >>
             obj: expr_no_struct >>
-            res: braces!(many0!(syn!(Arm))) >>
+            res: braces!(many0!(Arm::parse)) >>
             ({
                 let (arms, brace) = res;
                 ExprMatch {
@@ -1494,7 +1494,7 @@
     #[cfg(feature = "full")]
     impl Synom for Arm {
         named!(parse -> Self, do_parse!(
-            attrs: many0!(call!(Attribute::parse_outer)) >>
+            attrs: many0!(Attribute::parse_outer) >>
             pats: call!(Delimited::parse_separated_nonempty) >>
             guard: option!(tuple!(keyword!(if), syn!(Expr))) >>
             rocket: punct!(=>) >>
@@ -1809,10 +1809,10 @@
     #[cfg(feature = "full")]
     impl Block {
         named!(pub parse_within -> Vec<Stmt>, do_parse!(
-            many0!(punct!(;)) >>
-            mut standalone: many0!(terminated!(syn!(Stmt), many0!(punct!(;)))) >>
+            many0!(<Token![;]>::parse) >>
+            mut standalone: many0!(terminated!(syn!(Stmt), many0!(<Token![;]>::parse))) >>
             last: option!(do_parse!(
-                attrs: many0!(call!(Attribute::parse_outer)) >>
+                attrs: many0!(Attribute::parse_outer) >>
                 mut e: syn!(Expr) >>
                 ({
                     e.attrs = attrs;
@@ -1846,7 +1846,7 @@
 
     #[cfg(feature = "full")]
     named!(stmt_mac -> Stmt, do_parse!(
-        attrs: many0!(call!(Attribute::parse_outer)) >>
+        attrs: many0!(Attribute::parse_outer) >>
         what: syn!(Path) >>
         bang: punct!(!) >>
     // Only parse braces here; paren and bracket will get parsed as
@@ -1872,7 +1872,7 @@
 
     #[cfg(feature = "full")]
     named!(stmt_local -> Stmt, do_parse!(
-        attrs: many0!(call!(Attribute::parse_outer)) >>
+        attrs: many0!(Attribute::parse_outer) >>
         let_: keyword!(let) >>
         pat: syn!(Pat) >>
         ty: option!(tuple!(punct!(:), syn!(Type))) >>
@@ -1895,7 +1895,7 @@
 
     #[cfg(feature = "full")]
     named!(stmt_blockexpr -> Stmt, do_parse!(
-        attrs: many0!(call!(Attribute::parse_outer)) >>
+        attrs: many0!(Attribute::parse_outer) >>
         mut e: expr_nosemi >>
         // If the next token is a `.` or a `?` it is special-cased to parse as
         // an expression instead of a blockexpression.
@@ -1914,7 +1914,7 @@
 
     #[cfg(feature = "full")]
     named!(stmt_expr -> Stmt, do_parse!(
-        attrs: many0!(call!(Attribute::parse_outer)) >>
+        attrs: many0!(Attribute::parse_outer) >>
         mut e: syn!(Expr) >>
         semi: punct!(;) >>
         ({