@@ -141,14 +141,14 @@ impl<'a> Parser<'a> {
141141 self . bump ( ) ;
142142 // STATIC ITEM
143143 let m = self . parse_mutability ( ) ;
144- let info = self . parse_item_const ( Some ( m) ) ;
144+ let info = self . parse_item_const ( Some ( m) ) ? ;
145145 return self . mk_item_with_info ( attrs, lo, vis, info) ;
146146 }
147+
147148 if self . eat_keyword ( kw:: Const ) {
148149 let const_span = self . prev_span ;
149150 if [ kw:: Fn , kw:: Unsafe , kw:: Extern ] . iter ( ) . any ( |k| self . check_keyword ( * k) ) {
150151 // CONST FUNCTION ITEM
151-
152152 let unsafety = self . parse_unsafety ( ) ;
153153
154154 if self . check_keyword ( kw:: Extern ) {
@@ -157,7 +157,7 @@ impl<'a> Parser<'a> {
157157 ) ;
158158 }
159159 let abi = self . parse_extern_abi ( ) ?;
160- self . bump ( ) ; // 'fn'
160+ self . bump ( ) ; // `fn`
161161
162162 let header = FnHeader {
163163 unsafety,
@@ -181,7 +181,8 @@ impl<'a> Parser<'a> {
181181 )
182182 . emit ( ) ;
183183 }
184- let info = self . parse_item_const ( None ) ;
184+
185+ let info = self . parse_item_const ( None ) ?;
185186 return self . mk_item_with_info ( attrs, lo, vis, info) ;
186187 }
187188
@@ -210,6 +211,7 @@ impl<'a> Parser<'a> {
210211 return self . parse_item_fn ( lo, vis, attrs, header) ;
211212 }
212213 }
214+
213215 if self . check_keyword ( kw:: Unsafe ) &&
214216 self . is_keyword_ahead ( 1 , & [ kw:: Trait , kw:: Auto ] )
215217 {
@@ -222,21 +224,24 @@ impl<'a> Parser<'a> {
222224 self . expect_keyword ( kw:: Trait ) ?;
223225 IsAuto :: Yes
224226 } ;
225- let info = self . parse_item_trait ( is_auto, Unsafety :: Unsafe ) ;
227+ let info = self . parse_item_trait ( is_auto, Unsafety :: Unsafe ) ? ;
226228 return self . mk_item_with_info ( attrs, lo, vis, info) ;
227229 }
230+
228231 if self . check_keyword ( kw:: Impl ) ||
229232 self . check_keyword ( kw:: Unsafe ) &&
230233 self . is_keyword_ahead ( 1 , & [ kw:: Impl ] ) ||
231234 self . check_keyword ( kw:: Default ) &&
232- self . is_keyword_ahead ( 1 , & [ kw:: Impl , kw:: Unsafe ] ) {
235+ self . is_keyword_ahead ( 1 , & [ kw:: Impl , kw:: Unsafe ] )
236+ {
233237 // IMPL ITEM
234238 let defaultness = self . parse_defaultness ( ) ;
235239 let unsafety = self . parse_unsafety ( ) ;
236240 self . expect_keyword ( kw:: Impl ) ?;
237- let info = self . parse_item_impl ( unsafety, defaultness) ;
241+ let info = self . parse_item_impl ( unsafety, defaultness) ? ;
238242 return self . mk_item_with_info ( attrs, lo, vis, info) ;
239243 }
244+
240245 if self . check_keyword ( kw:: Fn ) {
241246 // FUNCTION ITEM
242247 self . bump ( ) ;
@@ -249,8 +254,10 @@ impl<'a> Parser<'a> {
249254 } ;
250255 return self . parse_item_fn ( lo, vis, attrs, header) ;
251256 }
257+
252258 if self . check_keyword ( kw:: Unsafe )
253- && self . look_ahead ( 1 , |t| * t != token:: OpenDelim ( token:: Brace ) ) {
259+ && self . look_ahead ( 1 , |t| * t != token:: OpenDelim ( token:: Brace ) )
260+ {
254261 // UNSAFE FUNCTION ITEM
255262 self . bump ( ) ; // `unsafe`
256263 // `{` is also expected after `unsafe`; in case of error, include it in the diagnostic.
@@ -266,11 +273,13 @@ impl<'a> Parser<'a> {
266273 } ;
267274 return self . parse_item_fn ( lo, vis, attrs, header) ;
268275 }
276+
269277 if self . eat_keyword ( kw:: Mod ) {
270278 // MODULE ITEM
271- let info = self . parse_item_mod ( & attrs[ ..] ) ;
279+ let info = self . parse_item_mod ( & attrs[ ..] ) ? ;
272280 return self . mk_item_with_info ( attrs, lo, vis, info) ;
273281 }
282+
274283 if let Some ( type_) = self . eat_type ( ) {
275284 let ( ident, alias, generics) = type_?;
276285 // TYPE ITEM
@@ -281,37 +290,41 @@ impl<'a> Parser<'a> {
281290 let span = lo. to ( self . prev_span ) ;
282291 return Ok ( Some ( self . mk_item ( span, ident, item_, vis, attrs) ) ) ;
283292 }
293+
284294 if self . eat_keyword ( kw:: Enum ) {
285295 // ENUM ITEM
286- let info = self . parse_item_enum ( ) ;
296+ let info = self . parse_item_enum ( ) ? ;
287297 return self . mk_item_with_info ( attrs, lo, vis, info) ;
288298 }
299+
289300 if self . check_keyword ( kw:: Trait )
290301 || ( self . check_keyword ( kw:: Auto )
291302 && self . is_keyword_ahead ( 1 , & [ kw:: Trait ] ) )
292303 {
293- let is_auto = if self . eat_keyword ( kw:: Trait ) {
294- IsAuto :: No
295- } else {
296- self . expect_keyword ( kw:: Auto ) ?;
297- self . expect_keyword ( kw:: Trait ) ?;
304+ // TRAIT ITEM
305+ let is_auto = if self . eat_keyword ( kw:: Auto ) {
298306 IsAuto :: Yes
307+ } else {
308+ IsAuto :: No
299309 } ;
300- // TRAIT ITEM
301- let info = self . parse_item_trait ( is_auto, Unsafety :: Normal ) ;
310+ self . expect_keyword ( kw :: Trait ) ? ;
311+ let info = self . parse_item_trait ( is_auto, Unsafety :: Normal ) ? ;
302312 return self . mk_item_with_info ( attrs, lo, vis, info) ;
303313 }
314+
304315 if self . eat_keyword ( kw:: Struct ) {
305316 // STRUCT ITEM
306- let info = self . parse_item_struct ( ) ;
317+ let info = self . parse_item_struct ( ) ? ;
307318 return self . mk_item_with_info ( attrs, lo, vis, info) ;
308319 }
320+
309321 if self . is_union_item ( ) {
310322 // UNION ITEM
311323 self . bump ( ) ;
312- let info = self . parse_item_union ( ) ;
324+ let info = self . parse_item_union ( ) ? ;
313325 return self . mk_item_with_info ( attrs, lo, vis, info) ;
314326 }
327+
315328 if let Some ( macro_def) = self . eat_macro_def ( & attrs, & vis, lo) ? {
316329 return Ok ( Some ( macro_def) ) ;
317330 }
@@ -417,9 +430,9 @@ impl<'a> Parser<'a> {
417430 attrs : Vec < Attribute > ,
418431 lo : Span ,
419432 vis : Visibility ,
420- info : PResult < ' a , ItemInfo > ,
433+ info : ItemInfo ,
421434 ) -> PResult < ' a , Option < P < Item > > > {
422- let ( ident, item, extra_attrs) = info? ;
435+ let ( ident, item, extra_attrs) = info;
423436 let span = lo. to ( self . prev_span ) ;
424437 let attrs = maybe_append ( attrs, extra_attrs) ;
425438 Ok ( Some ( self . mk_item ( span, ident, item, vis, attrs) ) )
@@ -1195,10 +1208,8 @@ impl<'a> Parser<'a> {
11951208 let allow_c_variadic = header. abi == Abi :: C && header. unsafety == Unsafety :: Unsafe ;
11961209 let ( ident, decl, generics) = self . parse_fn_sig ( allow_c_variadic) ?;
11971210 let ( inner_attrs, body) = self . parse_inner_attrs_and_block ( ) ?;
1198- let span = lo. to ( self . prev_span ) ;
11991211 let kind = ItemKind :: Fn ( decl, header, generics, body) ;
1200- let attrs = maybe_append ( attrs, Some ( inner_attrs) ) ;
1201- Ok ( Some ( self . mk_item ( span, ident, kind, vis, attrs) ) )
1212+ self . mk_item_with_info ( attrs, lo, vis, ( ident, kind, Some ( inner_attrs) ) )
12021213 }
12031214
12041215 /// Parse the "signature", including the identifier, parameters, and generics of a function.
0 commit comments