Skip to content

Commit 7f9638d

Browse files
committed
syntax: unify trait parsing a bit.
1 parent 090f3fd commit 7f9638d

File tree

1 file changed

+12
-17
lines changed

1 file changed

+12
-17
lines changed

src/libsyntax/parse/parser/item.rs

+12-17
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)