@@ -122,15 +122,12 @@ impl<'a> Parser<'a> {
122122 if self . eat_keyword ( kw:: Fn ) {
123123 // EXTERN FUNCTION ITEM
124124 let fn_span = self . prev_span ;
125- let ( ident , item_ , extra_attrs ) = self . parse_item_fn ( FnHeader {
125+ return self . parse_item_fn ( lo , visibility , attrs , FnHeader {
126126 unsafety : Unsafety :: Normal ,
127127 asyncness : respan ( fn_span, IsAsync :: NotAsync ) ,
128128 constness : respan ( fn_span, Constness :: NotConst ) ,
129129 abi : opt_abi. unwrap_or ( Abi :: C ) ,
130- } ) ?;
131- let span = lo. to ( self . prev_span ) ;
132- let attrs = maybe_append ( attrs, extra_attrs) ;
133- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
130+ } ) ;
134131 } else if self . check ( & token:: OpenDelim ( token:: Brace ) ) {
135132 return Ok ( Some (
136133 self . parse_item_foreign_mod ( lo, opt_abi, visibility, attrs, extern_sp) ?,
@@ -157,15 +154,12 @@ impl<'a> Parser<'a> {
157154 // CONST FUNCTION ITEM
158155 let unsafety = self . parse_unsafety ( ) ;
159156 self . bump ( ) ;
160- let ( ident , item_ , extra_attrs ) = self . parse_item_fn ( FnHeader {
157+ return self . parse_item_fn ( lo , visibility , attrs , FnHeader {
161158 unsafety,
162159 asyncness : respan ( const_span, IsAsync :: NotAsync ) ,
163160 constness : respan ( const_span, Constness :: Const ) ,
164161 abi : Abi :: Rust ,
165- } ) ?;
166- let span = lo. to ( self . prev_span ) ;
167- let attrs = maybe_append ( attrs, extra_attrs) ;
168- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
162+ } ) ;
169163 }
170164
171165 // CONST ITEM
@@ -202,16 +196,14 @@ impl<'a> Parser<'a> {
202196 closure_id : DUMMY_NODE_ID ,
203197 return_impl_trait_id : DUMMY_NODE_ID ,
204198 } ) ;
205- let ( ident , item_ , extra_attrs ) = self . parse_item_fn ( FnHeader {
199+ let item = self . parse_item_fn ( lo , visibility , attrs , FnHeader {
206200 unsafety,
207201 asyncness,
208202 constness : respan ( fn_span, Constness :: NotConst ) ,
209203 abi : Abi :: Rust ,
210204 } ) ?;
211205 self . ban_async_in_2015 ( async_span) ;
212- let span = lo. to ( self . prev_span ) ;
213- let attrs = maybe_append ( attrs, extra_attrs) ;
214- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
206+ return Ok ( item) ;
215207 }
216208 }
217209 if self . check_keyword ( kw:: Unsafe ) &&
@@ -249,15 +241,12 @@ impl<'a> Parser<'a> {
249241 // FUNCTION ITEM
250242 self . bump ( ) ;
251243 let fn_span = self . prev_span ;
252- let ( ident , item_ , extra_attrs ) = self . parse_item_fn ( FnHeader {
244+ return self . parse_item_fn ( lo , visibility , attrs , FnHeader {
253245 unsafety : Unsafety :: Normal ,
254246 asyncness : respan ( fn_span, IsAsync :: NotAsync ) ,
255247 constness : respan ( fn_span, Constness :: NotConst ) ,
256248 abi : Abi :: Rust ,
257- } ) ?;
258- let span = lo. to ( self . prev_span ) ;
259- let attrs = maybe_append ( attrs, extra_attrs) ;
260- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
249+ } ) ;
261250 }
262251 if self . check_keyword ( kw:: Unsafe )
263252 && self . look_ahead ( 1 , |t| * t != token:: OpenDelim ( token:: Brace ) ) {
@@ -272,15 +261,12 @@ impl<'a> Parser<'a> {
272261 } ;
273262 self . expect_keyword ( kw:: Fn ) ?;
274263 let fn_span = self . prev_span ;
275- let ( ident , item_ , extra_attrs ) = self . parse_item_fn ( FnHeader {
264+ return self . parse_item_fn ( lo , visibility , attrs , FnHeader {
276265 unsafety : Unsafety :: Unsafe ,
277266 asyncness : respan ( fn_span, IsAsync :: NotAsync ) ,
278267 constness : respan ( fn_span, Constness :: NotConst ) ,
279268 abi,
280- } ) ?;
281- let span = lo. to ( self . prev_span ) ;
282- let attrs = maybe_append ( attrs, extra_attrs) ;
283- return Ok ( Some ( self . mk_item ( span, ident, item_, visibility, attrs) ) ) ;
269+ } ) ;
284270 }
285271 if self . eat_keyword ( kw:: Mod ) {
286272 // MODULE ITEM
@@ -1195,11 +1181,20 @@ impl<'a> Parser<'a> {
11951181 }
11961182
11971183 /// Parses an item-position function declaration.
1198- fn parse_item_fn ( & mut self , header : FnHeader ) -> PResult < ' a , ItemInfo > {
1184+ fn parse_item_fn (
1185+ & mut self ,
1186+ lo : Span ,
1187+ vis : Visibility ,
1188+ attrs : Vec < Attribute > ,
1189+ header : FnHeader ,
1190+ ) -> PResult < ' a , Option < P < Item > > > {
11991191 let allow_c_variadic = header. abi == Abi :: C && header. unsafety == Unsafety :: Unsafe ;
12001192 let ( ident, decl, generics) = self . parse_fn_sig ( allow_c_variadic) ?;
12011193 let ( inner_attrs, body) = self . parse_inner_attrs_and_block ( ) ?;
1202- Ok ( ( ident, ItemKind :: Fn ( decl, header, generics, body) , Some ( inner_attrs) ) )
1194+ let span = lo. to ( self . prev_span ) ;
1195+ let kind = ItemKind :: Fn ( decl, header, generics, body) ;
1196+ let attrs = maybe_append ( attrs, Some ( inner_attrs) ) ;
1197+ Ok ( Some ( self . mk_item ( span, ident, kind, vis, attrs) ) )
12031198 }
12041199
12051200 /// Parse the "signature", including the identifier, parameters, and generics of a function.
0 commit comments