@@ -217,14 +217,7 @@ impl<'a> Parser<'a> {
217
217
{
218
218
// UNSAFE TRAIT ITEM
219
219
self . bump ( ) ; // `unsafe`
220
- let is_auto = if self . eat_keyword ( kw:: Trait ) {
221
- IsAuto :: No
222
- } else {
223
- self . expect_keyword ( kw:: Auto ) ?;
224
- self . expect_keyword ( kw:: Trait ) ?;
225
- IsAuto :: Yes
226
- } ;
227
- let info = self . parse_item_trait ( is_auto, Unsafety :: Unsafe ) ?;
220
+ let info = self . parse_item_trait ( Unsafety :: Unsafe ) ?;
228
221
return self . mk_item_with_info ( attrs, lo, vis, info) ;
229
222
}
230
223
@@ -302,13 +295,7 @@ impl<'a> Parser<'a> {
302
295
&& self . is_keyword_ahead ( 1 , & [ kw:: Trait ] ) )
303
296
{
304
297
// TRAIT ITEM
305
- let is_auto = if self . eat_keyword ( kw:: Auto ) {
306
- IsAuto :: Yes
307
- } else {
308
- IsAuto :: No
309
- } ;
310
- self . expect_keyword ( kw:: Trait ) ?;
311
- let info = self . parse_item_trait ( is_auto, Unsafety :: Normal ) ?;
298
+ let info = self . parse_item_trait ( Unsafety :: Normal ) ?;
312
299
return self . mk_item_with_info ( attrs, lo, vis, info) ;
313
300
}
314
301
@@ -860,8 +847,16 @@ impl<'a> Parser<'a> {
860
847
Ok ( FnHeader { constness, unsafety, asyncness, abi } )
861
848
}
862
849
863
- /// Parses `trait Foo { ... }` or `trait Foo = Bar;`.
864
- fn parse_item_trait ( & mut self , is_auto : IsAuto , unsafety : Unsafety ) -> PResult < ' a , ItemInfo > {
850
+ /// Parses `auto? trait Foo { ... }` or `trait Foo = Bar;`.
851
+ fn parse_item_trait ( & mut self , unsafety : Unsafety ) -> PResult < ' a , ItemInfo > {
852
+ // Parse optional `auto` prefix.
853
+ let is_auto = if self . eat_keyword ( kw:: Auto ) {
854
+ IsAuto :: Yes
855
+ } else {
856
+ IsAuto :: No
857
+ } ;
858
+
859
+ self . expect_keyword ( kw:: Trait ) ?;
865
860
let ident = self . parse_ident ( ) ?;
866
861
let mut tps = self . parse_generics ( ) ?;
867
862
0 commit comments