@@ -122,15 +122,12 @@ impl<'a> Parser<'a> {
122
122
if self . eat_keyword ( kw:: Fn ) {
123
123
// EXTERN FUNCTION ITEM
124
124
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 {
126
126
unsafety : Unsafety :: Normal ,
127
127
asyncness : respan ( fn_span, IsAsync :: NotAsync ) ,
128
128
constness : respan ( fn_span, Constness :: NotConst ) ,
129
129
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
+ } ) ;
134
131
} else if self . check ( & token:: OpenDelim ( token:: Brace ) ) {
135
132
return Ok ( Some (
136
133
self . parse_item_foreign_mod ( lo, opt_abi, visibility, attrs, extern_sp) ?,
@@ -157,15 +154,12 @@ impl<'a> Parser<'a> {
157
154
// CONST FUNCTION ITEM
158
155
let unsafety = self . parse_unsafety ( ) ;
159
156
self . bump ( ) ;
160
- let ( ident , item_ , extra_attrs ) = self . parse_item_fn ( FnHeader {
157
+ return self . parse_item_fn ( lo , visibility , attrs , FnHeader {
161
158
unsafety,
162
159
asyncness : respan ( const_span, IsAsync :: NotAsync ) ,
163
160
constness : respan ( const_span, Constness :: Const ) ,
164
161
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
+ } ) ;
169
163
}
170
164
171
165
// CONST ITEM
@@ -202,16 +196,14 @@ impl<'a> Parser<'a> {
202
196
closure_id : DUMMY_NODE_ID ,
203
197
return_impl_trait_id : DUMMY_NODE_ID ,
204
198
} ) ;
205
- let ( ident , item_ , extra_attrs ) = self . parse_item_fn ( FnHeader {
199
+ let item = self . parse_item_fn ( lo , visibility , attrs , FnHeader {
206
200
unsafety,
207
201
asyncness,
208
202
constness : respan ( fn_span, Constness :: NotConst ) ,
209
203
abi : Abi :: Rust ,
210
204
} ) ?;
211
205
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) ;
215
207
}
216
208
}
217
209
if self . check_keyword ( kw:: Unsafe ) &&
@@ -249,15 +241,12 @@ impl<'a> Parser<'a> {
249
241
// FUNCTION ITEM
250
242
self . bump ( ) ;
251
243
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 {
253
245
unsafety : Unsafety :: Normal ,
254
246
asyncness : respan ( fn_span, IsAsync :: NotAsync ) ,
255
247
constness : respan ( fn_span, Constness :: NotConst ) ,
256
248
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
+ } ) ;
261
250
}
262
251
if self . check_keyword ( kw:: Unsafe )
263
252
&& self . look_ahead ( 1 , |t| * t != token:: OpenDelim ( token:: Brace ) ) {
@@ -272,15 +261,12 @@ impl<'a> Parser<'a> {
272
261
} ;
273
262
self . expect_keyword ( kw:: Fn ) ?;
274
263
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 {
276
265
unsafety : Unsafety :: Unsafe ,
277
266
asyncness : respan ( fn_span, IsAsync :: NotAsync ) ,
278
267
constness : respan ( fn_span, Constness :: NotConst ) ,
279
268
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
+ } ) ;
284
270
}
285
271
if self . eat_keyword ( kw:: Mod ) {
286
272
// MODULE ITEM
@@ -1195,11 +1181,20 @@ impl<'a> Parser<'a> {
1195
1181
}
1196
1182
1197
1183
/// 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 > > > {
1199
1191
let allow_c_variadic = header. abi == Abi :: C && header. unsafety == Unsafety :: Unsafe ;
1200
1192
let ( ident, decl, generics) = self . parse_fn_sig ( allow_c_variadic) ?;
1201
1193
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) ) )
1203
1198
}
1204
1199
1205
1200
/// Parse the "signature", including the identifier, parameters, and generics of a function.
0 commit comments