@@ -217,14 +217,7 @@ impl<'a> Parser<'a> {
217217 {
218218 // UNSAFE TRAIT ITEM
219219 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 ) ?;
228221 return self . mk_item_with_info ( attrs, lo, vis, info) ;
229222 }
230223
@@ -302,13 +295,7 @@ impl<'a> Parser<'a> {
302295 && self . is_keyword_ahead ( 1 , & [ kw:: Trait ] ) )
303296 {
304297 // 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 ) ?;
312299 return self . mk_item_with_info ( attrs, lo, vis, info) ;
313300 }
314301
@@ -860,8 +847,16 @@ impl<'a> Parser<'a> {
860847 Ok ( FnHeader { constness, unsafety, asyncness, abi } )
861848 }
862849
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 ) ?;
865860 let ident = self . parse_ident ( ) ?;
866861 let mut tps = self . parse_generics ( ) ?;
867862
0 commit comments