about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-10-01 14:19:08 +0200
committerMazdak Farrokhzad <twingoow@gmail.com>2019-10-07 06:01:38 +0200
commit7f9638d5d4b0b0f4ad592c135e155cdef1ddfb72 (patch)
treef3dd82223da74e73ef788bffd121ae3b702ce7d0 /src/libsyntax/parse
parent090f3fd0c958e4ea8e7a6dfe33ae647d339c0544 (diff)
downloadrust-7f9638d5d4b0b0f4ad592c135e155cdef1ddfb72.tar.gz
rust-7f9638d5d4b0b0f4ad592c135e155cdef1ddfb72.zip
syntax: unify trait parsing a bit.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser/item.rs29
1 files changed, 12 insertions, 17 deletions
diff --git a/src/libsyntax/parse/parser/item.rs b/src/libsyntax/parse/parser/item.rs
index 004c179b7c7..17b23651e80 100644
--- a/src/libsyntax/parse/parser/item.rs
+++ b/src/libsyntax/parse/parser/item.rs
@@ -217,14 +217,7 @@ impl<'a> Parser<'a> {
         {
             // UNSAFE TRAIT ITEM
             self.bump(); // `unsafe`
-            let is_auto = if self.eat_keyword(kw::Trait) {
-                IsAuto::No
-            } else {
-                self.expect_keyword(kw::Auto)?;
-                self.expect_keyword(kw::Trait)?;
-                IsAuto::Yes
-            };
-            let info = self.parse_item_trait(is_auto, Unsafety::Unsafe)?;
+            let info = self.parse_item_trait(Unsafety::Unsafe)?;
             return self.mk_item_with_info(attrs, lo, vis, info);
         }
 
@@ -302,13 +295,7 @@ impl<'a> Parser<'a> {
                 && self.is_keyword_ahead(1, &[kw::Trait]))
         {
             // TRAIT ITEM
-            let is_auto = if self.eat_keyword(kw::Auto) {
-                IsAuto::Yes
-            } else {
-                IsAuto::No
-            };
-            self.expect_keyword(kw::Trait)?;
-            let info = self.parse_item_trait(is_auto, Unsafety::Normal)?;
+            let info = self.parse_item_trait(Unsafety::Normal)?;
             return self.mk_item_with_info(attrs, lo, vis, info);
         }
 
@@ -860,8 +847,16 @@ impl<'a> Parser<'a> {
         Ok(FnHeader { constness, unsafety, asyncness, abi })
     }
 
-    /// Parses `trait Foo { ... }` or `trait Foo = Bar;`.
-    fn parse_item_trait(&mut self, is_auto: IsAuto, unsafety: Unsafety) -> PResult<'a, ItemInfo> {
+    /// Parses `auto? trait Foo { ... }` or `trait Foo = Bar;`.
+    fn parse_item_trait(&mut self, unsafety: Unsafety) -> PResult<'a, ItemInfo> {
+        // Parse optional `auto` prefix.
+        let is_auto = if self.eat_keyword(kw::Auto) {
+            IsAuto::Yes
+        } else {
+            IsAuto::No
+        };
+
+        self.expect_keyword(kw::Trait)?;
         let ident = self.parse_ident()?;
         let mut tps = self.parse_generics()?;