Inline away BareFnType
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 043a61e..c30bdf4 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -62,8 +62,6 @@
fn fold_bare_fn_arg_name(&mut self, i: BareFnArgName) -> BareFnArgName { fold_bare_fn_arg_name(self, i) }
-fn fold_bare_fn_type(&mut self, i: BareFnType) -> BareFnType { fold_bare_fn_type(self, i) }
-
fn fold_bin_op(&mut self, i: BinOp) -> BinOp { fold_bin_op(self, i) }
# [ cfg ( feature = "full" ) ]
fn fold_block(&mut self, i: Block) -> Block { fold_block(self, i) }
@@ -508,19 +506,6 @@
}
}
-pub fn fold_bare_fn_type<V: Folder + ?Sized>(_visitor: &mut V, _i: BareFnType) -> BareFnType {
- BareFnType {
- unsafety: (_i . unsafety).map(|it| { Token ! [ unsafe ](tokens_helper(_visitor, &(it).0)) }),
- abi: (_i . abi).map(|it| { _visitor.fold_abi(it) }),
- fn_token: Token ! [ fn ](tokens_helper(_visitor, &(_i . fn_token).0)),
- lifetimes: (_i . lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
- paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
- inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_bare_fn_arg(it) }),
- variadic: (_i . variadic).map(|it| { Token ! [ ... ](tokens_helper(_visitor, &(it).0)) }),
- output: _visitor.fold_return_type(_i . output),
- }
-}
-
pub fn fold_bin_op<V: Folder + ?Sized>(_visitor: &mut V, _i: BinOp) -> BinOp {
use ::BinOp::*;
match _i {
@@ -2449,7 +2434,14 @@
pub fn fold_type_bare_fn<V: Folder + ?Sized>(_visitor: &mut V, _i: TypeBareFn) -> TypeBareFn {
TypeBareFn {
- ty: Box::new(_visitor.fold_bare_fn_type(* _i . ty)),
+ unsafety: (_i . unsafety).map(|it| { Token ! [ unsafe ](tokens_helper(_visitor, &(it).0)) }),
+ abi: (_i . abi).map(|it| { _visitor.fold_abi(it) }),
+ fn_token: Token ! [ fn ](tokens_helper(_visitor, &(_i . fn_token).0)),
+ lifetimes: (_i . lifetimes).map(|it| { _visitor.fold_bound_lifetimes(it) }),
+ paren_token: Paren(tokens_helper(_visitor, &(_i . paren_token).0)),
+ inputs: FoldHelper::lift(_i . inputs, |it| { _visitor.fold_bare_fn_arg(it) }),
+ variadic: (_i . variadic).map(|it| { Token ! [ ... ](tokens_helper(_visitor, &(it).0)) }),
+ output: _visitor.fold_return_type(_i . output),
}
}
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index 1f140ff..ea9cae6 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -58,8 +58,6 @@
fn visit_bare_fn_arg_name(&mut self, i: &'ast BareFnArgName) { visit_bare_fn_arg_name(self, i) }
-fn visit_bare_fn_type(&mut self, i: &'ast BareFnType) { visit_bare_fn_type(self, i) }
-
fn visit_bin_op(&mut self, i: &'ast BinOp) { visit_bin_op(self, i) }
# [ cfg ( feature = "full" ) ]
fn visit_block(&mut self, i: &'ast Block) { visit_block(self, i) }
@@ -470,17 +468,6 @@
}
}
-pub fn visit_bare_fn_type<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BareFnType) {
- if let Some(ref it) = _i . unsafety { tokens_helper(_visitor, &(it).0) };
- if let Some(ref it) = _i . abi { _visitor.visit_abi(it) };
- tokens_helper(_visitor, &(& _i . fn_token).0);
- if let Some(ref it) = _i . lifetimes { _visitor.visit_bound_lifetimes(it) };
- tokens_helper(_visitor, &(& _i . paren_token).0);
- for el in & _i . inputs { let it = el.item(); _visitor.visit_bare_fn_arg(it) };
- if let Some(ref it) = _i . variadic { tokens_helper(_visitor, &(it).0) };
- _visitor.visit_return_type(& _i . output);
-}
-
pub fn visit_bin_op<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast BinOp) {
use ::BinOp::*;
match *_i {
@@ -1903,7 +1890,14 @@
}
pub fn visit_type_bare_fn<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeBareFn) {
- _visitor.visit_bare_fn_type(& * _i . ty);
+ if let Some(ref it) = _i . unsafety { tokens_helper(_visitor, &(it).0) };
+ if let Some(ref it) = _i . abi { _visitor.visit_abi(it) };
+ tokens_helper(_visitor, &(& _i . fn_token).0);
+ if let Some(ref it) = _i . lifetimes { _visitor.visit_bound_lifetimes(it) };
+ tokens_helper(_visitor, &(& _i . paren_token).0);
+ for el in & _i . inputs { let it = el.item(); _visitor.visit_bare_fn_arg(it) };
+ if let Some(ref it) = _i . variadic { tokens_helper(_visitor, &(it).0) };
+ _visitor.visit_return_type(& _i . output);
}
pub fn visit_type_binding<'ast, V: Visitor<'ast> + ?Sized>(_visitor: &mut V, _i: &'ast TypeBinding) {
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 7657273..0764da9 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -58,8 +58,6 @@
fn visit_bare_fn_arg_name_mut(&mut self, i: &mut BareFnArgName) { visit_bare_fn_arg_name_mut(self, i) }
-fn visit_bare_fn_type_mut(&mut self, i: &mut BareFnType) { visit_bare_fn_type_mut(self, i) }
-
fn visit_bin_op_mut(&mut self, i: &mut BinOp) { visit_bin_op_mut(self, i) }
# [ cfg ( feature = "full" ) ]
fn visit_block_mut(&mut self, i: &mut Block) { visit_block_mut(self, i) }
@@ -470,17 +468,6 @@
}
}
-pub fn visit_bare_fn_type_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BareFnType) {
- if let Some(ref mut it) = _i . unsafety { tokens_helper(_visitor, &mut (it).0) };
- if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(it) };
- tokens_helper(_visitor, &mut (& mut _i . fn_token).0);
- if let Some(ref mut it) = _i . lifetimes { _visitor.visit_bound_lifetimes_mut(it) };
- tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
- for mut el in & mut _i . inputs { let it = el.item_mut(); _visitor.visit_bare_fn_arg_mut(it) };
- if let Some(ref mut it) = _i . variadic { tokens_helper(_visitor, &mut (it).0) };
- _visitor.visit_return_type_mut(& mut _i . output);
-}
-
pub fn visit_bin_op_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut BinOp) {
use ::BinOp::*;
match *_i {
@@ -1903,7 +1890,14 @@
}
pub fn visit_type_bare_fn_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeBareFn) {
- _visitor.visit_bare_fn_type_mut(& mut * _i . ty);
+ if let Some(ref mut it) = _i . unsafety { tokens_helper(_visitor, &mut (it).0) };
+ if let Some(ref mut it) = _i . abi { _visitor.visit_abi_mut(it) };
+ tokens_helper(_visitor, &mut (& mut _i . fn_token).0);
+ if let Some(ref mut it) = _i . lifetimes { _visitor.visit_bound_lifetimes_mut(it) };
+ tokens_helper(_visitor, &mut (& mut _i . paren_token).0);
+ for mut el in & mut _i . inputs { let it = el.item_mut(); _visitor.visit_bare_fn_arg_mut(it) };
+ if let Some(ref mut it) = _i . variadic { tokens_helper(_visitor, &mut (it).0) };
+ _visitor.visit_return_type_mut(& mut _i . output);
}
pub fn visit_type_binding_mut<V: VisitorMut + ?Sized>(_visitor: &mut V, _i: &mut TypeBinding) {
diff --git a/src/lib.rs b/src/lib.rs
index a6a031f..b13a1ed 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -87,7 +87,7 @@
pub use op::{BinOp, UnOp};
mod ty;
-pub use ty::{Abi, AbiKind, AngleBracketedGenericArguments, BareFnArg, BareFnArgName, BareFnType,
+pub use ty::{Abi, AbiKind, AngleBracketedGenericArguments, BareFnArg, BareFnArgName,
GenericArgument, ParenthesizedGenericArguments, Path,
PathArguments, PathSegment, PolyTraitRef, QSelf, ReturnType, Type, TypeArray,
TypeBareFn, TypeBinding, TypeGroup, TypeImplTrait, TypeInfer, TypeNever, TypeParen,
diff --git a/src/ty.rs b/src/ty.rs
index 970ddfd..5b8c819 100644
--- a/src/ty.rs
+++ b/src/ty.rs
@@ -32,7 +32,14 @@
}),
/// A bare function (e.g. `fn(usize) -> bool`)
pub BareFn(TypeBareFn {
- pub ty: Box<BareFnType>,
+ pub unsafety: Option<Token![unsafe]>,
+ pub abi: Option<Abi>,
+ pub fn_token: Token![fn],
+ pub lifetimes: Option<BoundLifetimes>,
+ pub paren_token: token::Paren,
+ pub inputs: Delimited<BareFnArg, Token![,]>,
+ pub variadic: Option<Token![...]>,
+ pub output: ReturnType,
}),
/// The never type (`!`)
pub Never(TypeNever {
@@ -262,19 +269,6 @@
}
ast_struct! {
- pub struct BareFnType {
- pub unsafety: Option<Token![unsafe]>,
- pub abi: Option<Abi>,
- pub fn_token: Token![fn],
- pub lifetimes: Option<BoundLifetimes>,
- pub paren_token: token::Paren,
- pub inputs: Delimited<BareFnArg, Token![,]>,
- pub variadic: Option<Token![...]>,
- pub output: ReturnType,
- }
-}
-
-ast_struct! {
pub struct Abi {
pub extern_token: Token![extern],
pub kind: AbiKind,
@@ -454,16 +448,14 @@
)) >>
output: syn!(ReturnType) >>
(TypeBareFn {
- ty: Box::new(BareFnType {
- unsafety: unsafety,
- abi: abi,
- lifetimes: lifetimes,
- output: output,
- variadic: (parens.0).1,
- fn_token: fn_,
- paren_token: parens.1,
- inputs: (parens.0).0,
- }),
+ unsafety: unsafety,
+ abi: abi,
+ lifetimes: lifetimes,
+ output: output,
+ variadic: (parens.0).1,
+ fn_token: fn_,
+ paren_token: parens.1,
+ inputs: (parens.0).0,
})
));
}
@@ -847,7 +839,21 @@
impl ToTokens for TypeBareFn {
fn to_tokens(&self, tokens: &mut Tokens) {
- self.ty.to_tokens(tokens)
+ self.lifetimes.to_tokens(tokens);
+ self.unsafety.to_tokens(tokens);
+ self.abi.to_tokens(tokens);
+ self.fn_token.to_tokens(tokens);
+ self.paren_token.surround(tokens, |tokens| {
+ self.inputs.to_tokens(tokens);
+ if let Some(ref variadic) = self.variadic {
+ if !self.inputs.empty_or_trailing() {
+ let span = variadic.0[0];
+ <Token![,]>::new(span).to_tokens(tokens);
+ }
+ variadic.to_tokens(tokens);
+ }
+ });
+ self.output.to_tokens(tokens);
}
}
@@ -1044,26 +1050,6 @@
}
}
- impl ToTokens for BareFnType {
- fn to_tokens(&self, tokens: &mut Tokens) {
- self.lifetimes.to_tokens(tokens);
- self.unsafety.to_tokens(tokens);
- self.abi.to_tokens(tokens);
- self.fn_token.to_tokens(tokens);
- self.paren_token.surround(tokens, |tokens| {
- self.inputs.to_tokens(tokens);
- if let Some(ref variadic) = self.variadic {
- if !self.inputs.empty_or_trailing() {
- let span = variadic.0[0];
- <Token![,]>::new(span).to_tokens(tokens);
- }
- variadic.to_tokens(tokens);
- }
- });
- self.output.to_tokens(tokens);
- }
- }
-
impl ToTokens for BareFnArg {
fn to_tokens(&self, tokens: &mut Tokens) {
if let Some((ref name, ref colon)) = self.name {