Avoid recompiling the implementation of many0 so much
diff --git a/src/data.rs b/src/data.rs
index d9b436b..600c8f1 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -112,7 +112,7 @@
impl Field {
named!(pub parse_struct -> Self, do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
id: syn!(Ident) >>
colon: punct!(:) >>
@@ -127,7 +127,7 @@
));
named!(pub parse_tuple -> Self, do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
ty: syn!(Type) >>
(Field {
diff --git a/src/derive.rs b/src/derive.rs
index da3f2ea..a007c03 100644
--- a/src/derive.rs
+++ b/src/derive.rs
@@ -50,7 +50,7 @@
impl Synom for DeriveInput {
named!(parse -> Self, do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
which: alt!(
keyword!(struct) => { Ok }
@@ -127,7 +127,7 @@
impl Synom for Variant {
named!(parse -> Self, do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
id: syn!(Ident) >>
data: alt!(
struct_like_body => { |(d, b)| VariantData::Struct(d, b) }
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!(;) >>
({
diff --git a/src/file.rs b/src/file.rs
index fd3d5b2..fe06958 100644
--- a/src/file.rs
+++ b/src/file.rs
@@ -16,8 +16,8 @@
impl Synom for File {
named!(parse -> Self, do_parse!(
- attrs: many0!(call!(Attribute::parse_inner)) >>
- items: many0!(syn!(Item)) >>
+ attrs: many0!(Attribute::parse_inner) >>
+ items: many0!(Item::parse) >>
(File {
shebang: None,
attrs: attrs,
diff --git a/src/generics.rs b/src/generics.rs
index fee556c..646b64e 100644
--- a/src/generics.rs
+++ b/src/generics.rs
@@ -239,7 +239,7 @@
impl Synom for LifetimeDef {
named!(parse -> Self, do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
life: syn!(Lifetime) >>
colon: option!(punct!(:)) >>
bounds: cond!(
@@ -272,7 +272,7 @@
impl Synom for TypeParam {
named!(parse -> Self, do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
id: syn!(Ident) >>
colon: option!(punct!(:)) >>
bounds: cond!(
@@ -321,7 +321,7 @@
impl Synom for ConstParam {
named!(parse -> Self, do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
const_: keyword!(const) >>
ident: syn!(Ident) >>
colon: punct!(:) >>
diff --git a/src/item.rs b/src/item.rs
index d38d25f..7fd97a3 100644
--- a/src/item.rs
+++ b/src/item.rs
@@ -510,7 +510,7 @@
));
impl_synom!(ItemMacro "macro item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
what: syn!(Path) >>
bang: punct!(!) >>
ident: option!(syn!(Ident)) >>
@@ -529,7 +529,7 @@
// TODO: figure out the actual grammar; is body required to be braced?
impl_synom!(ItemMacro2 "macro2 item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
macro_: keyword!(macro) >>
ident: syn!(Ident) >>
@@ -546,7 +546,7 @@
));
impl_synom!(ItemExternCrate "extern crate item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
extern_: keyword!(extern) >>
crate_: keyword!(crate) >>
@@ -565,7 +565,7 @@
));
impl_synom!(ItemUse "use item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
use_: keyword!(use) >>
leading_colon: option!(punct!(::)) >>
@@ -652,7 +652,7 @@
));
impl_synom!(ItemStatic "static item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
static_: keyword!(static) >>
mutability: syn!(Mutability) >>
@@ -677,7 +677,7 @@
));
impl_synom!(ItemConst "const item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
const_: keyword!(const) >>
ident: syn!(Ident) >>
@@ -700,7 +700,7 @@
));
impl_synom!(ItemFn "fn item" do_parse!(
- outer_attrs: many0!(call!(Attribute::parse_outer)) >>
+ outer_attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
constness: syn!(Constness) >>
unsafety: syn!(Unsafety) >>
@@ -712,7 +712,7 @@
ret: syn!(ReturnType) >>
where_clause: syn!(WhereClause) >>
inner_attrs_stmts: braces!(tuple!(
- many0!(call!(Attribute::parse_inner)),
+ many0!(Attribute::parse_inner),
call!(Block::parse_within)
)) >>
(ItemFn {
@@ -787,7 +787,7 @@
}
impl_synom!(ItemMod "mod item" do_parse!(
- outer_attrs: many0!(call!(Attribute::parse_outer)) >>
+ outer_attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
mod_: keyword!(mod) >>
ident: syn!(Ident) >>
@@ -800,8 +800,8 @@
|
braces!(
tuple!(
- many0!(call!(Attribute::parse_inner)),
- many0!(syn!(Item))
+ many0!(Attribute::parse_inner),
+ many0!(Item::parse)
)
) => {|((inner_attrs, items), brace)| (
inner_attrs,
@@ -824,9 +824,9 @@
));
impl_synom!(ItemForeignMod "foreign mod item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
abi: syn!(Abi) >>
- items: braces!(many0!(syn!(ForeignItem))) >>
+ items: braces!(many0!(ForeignItem::parse)) >>
(ItemForeignMod {
attrs: attrs,
abi: abi,
@@ -844,7 +844,7 @@
));
impl_synom!(ForeignItemFn "foreign function" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
fn_: keyword!(fn) >>
ident: syn!(Ident) >>
@@ -883,7 +883,7 @@
));
impl_synom!(ForeignItemStatic "foreign static" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
static_: keyword!(static) >>
mutability: syn!(Mutability) >>
@@ -904,7 +904,7 @@
));
impl_synom!(ForeignItemType "foreign type" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
type_: keyword!(type) >>
ident: syn!(Ident) >>
@@ -919,7 +919,7 @@
));
impl_synom!(ItemType "type item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
type_: keyword!(type) >>
ident: syn!(Ident) >>
@@ -958,7 +958,7 @@
));
impl_synom!(ItemUnion "union item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
union_: keyword!(union) >>
ident: syn!(Ident) >>
@@ -980,7 +980,7 @@
));
impl_synom!(ItemTrait "trait item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
unsafety: syn!(Unsafety) >>
auto_: option!(keyword!(auto)) >>
@@ -992,7 +992,7 @@
call!(Delimited::parse_separated_nonempty)
) >>
where_clause: syn!(WhereClause) >>
- body: braces!(many0!(syn!(TraitItem))) >>
+ body: braces!(many0!(TraitItem::parse)) >>
(ItemTrait {
attrs: attrs,
vis: vis,
@@ -1012,7 +1012,7 @@
));
impl_synom!(ItemDefaultImpl "default impl item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
unsafety: syn!(Unsafety) >>
impl_: keyword!(impl) >>
path: syn!(Path) >>
@@ -1041,7 +1041,7 @@
));
impl_synom!(TraitItemConst "const trait item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
const_: keyword!(const) >>
ident: syn!(Ident) >>
colon: punct!(:) >>
@@ -1060,7 +1060,7 @@
));
impl_synom!(TraitItemMethod "method trait item" do_parse!(
- outer_attrs: many0!(call!(Attribute::parse_outer)) >>
+ outer_attrs: many0!(Attribute::parse_outer) >>
constness: syn!(Constness) >>
unsafety: syn!(Unsafety) >>
abi: option!(syn!(Abi)) >>
@@ -1071,7 +1071,7 @@
ret: syn!(ReturnType) >>
where_clause: syn!(WhereClause) >>
body: option!(braces!(
- tuple!(many0!(call!(Attribute::parse_inner)),
+ tuple!(many0!(Attribute::parse_inner),
call!(Block::parse_within))
)) >>
semi: cond!(body.is_none(), punct!(;)) >>
@@ -1116,7 +1116,7 @@
));
impl_synom!(TraitItemType "trait item type" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
type_: keyword!(type) >>
ident: syn!(Ident) >>
generics: syn!(Generics) >>
@@ -1143,7 +1143,7 @@
));
impl_synom!(TraitItemMacro "trait item macro" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
mac: syn!(Macro) >>
cond!(!mac.is_braced(), punct!(;)) >>
(TraitItemMacro {
@@ -1153,7 +1153,7 @@
));
impl_synom!(ItemImpl "impl item" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
defaultness: syn!(Defaultness) >>
unsafety: syn!(Unsafety) >>
impl_: keyword!(impl) >>
@@ -1170,7 +1170,7 @@
) >>
self_ty: syn!(Type) >>
where_clause: syn!(WhereClause) >>
- body: braces!(many0!(syn!(ImplItem))) >>
+ body: braces!(many0!(ImplItem::parse)) >>
(ItemImpl {
attrs: attrs,
defaultness: defaultness,
@@ -1198,7 +1198,7 @@
));
impl_synom!(ImplItemConst "const item in impl block" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
defaultness: syn!(Defaultness) >>
const_: keyword!(const) >>
@@ -1223,7 +1223,7 @@
));
impl_synom!(ImplItemMethod "method in impl block" do_parse!(
- outer_attrs: many0!(call!(Attribute::parse_outer)) >>
+ outer_attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
defaultness: syn!(Defaultness) >>
constness: syn!(Constness) >>
@@ -1236,7 +1236,7 @@
ret: syn!(ReturnType) >>
where_clause: syn!(WhereClause) >>
inner_attrs_stmts: braces!(tuple!(
- many0!(call!(Attribute::parse_inner)),
+ many0!(Attribute::parse_inner),
call!(Block::parse_within)
)) >>
(ImplItemMethod {
@@ -1273,7 +1273,7 @@
));
impl_synom!(ImplItemType "type in impl block" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
vis: syn!(Visibility) >>
defaultness: syn!(Defaultness) >>
type_: keyword!(type) >>
@@ -1296,7 +1296,7 @@
));
impl_synom!(ImplItemMacro "macro in impl block" do_parse!(
- attrs: many0!(call!(Attribute::parse_outer)) >>
+ attrs: many0!(Attribute::parse_outer) >>
mac: syn!(Macro) >>
cond!(!mac.is_braced(), punct!(;)) >>
(ImplItemMacro {