diff options
| author | bors <bors@rust-lang.org> | 2015-08-10 20:24:06 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-08-10 20:24:06 +0000 |
| commit | 8856927f649d9ce80ff52377ac2389a2798a7033 (patch) | |
| tree | e473c97032df74a645b8c13fac35ec786e5046b0 /src/libsyntax/parse | |
| parent | 3d69bec88119e0471a98cd2075fcf53c43ebca3e (diff) | |
| parent | cfcd449c4c36c68541c3389878e3262dac5e4746 (diff) | |
| download | rust-8856927f649d9ce80ff52377ac2389a2798a7033.tar.gz rust-8856927f649d9ce80ff52377ac2389a2798a7033.zip | |
Auto merge of #27451 - seanmonstar:use-groups-as, r=alexcrichton
An implementation of [RFC 1219](https://github.com/rust-lang/rfcs/pull/1219). The RFC is not merged yet, but once merged, this could be.
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 7b8ad7d7af6..77042547742 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -574,10 +574,12 @@ impl<'a> Parser<'a> { pub fn parse_path_list_item(&mut self) -> PResult<ast::PathListItem> { let lo = self.span.lo; let node = if try!(self.eat_keyword(keywords::SelfValue)) { - ast::PathListMod { id: ast::DUMMY_NODE_ID } + let rename = try!(self.parse_rename()); + ast::PathListMod { id: ast::DUMMY_NODE_ID, rename: rename } } else { let ident = try!(self.parse_ident()); - ast::PathListIdent { name: ident, id: ast::DUMMY_NODE_ID } + let rename = try!(self.parse_rename()); + ast::PathListIdent { name: ident, rename: rename, id: ast::DUMMY_NODE_ID } }; let hi = self.last_span.hi; Ok(spanned(lo, hi, node)) @@ -5117,8 +5119,8 @@ impl<'a> Parser<'a> { -> PResult<P<Item>> { let crate_name = try!(self.parse_ident()); - let (maybe_path, ident) = if try!(self.eat_keyword(keywords::As)) { - (Some(crate_name.name), try!(self.parse_ident())) + let (maybe_path, ident) = if let Some(ident) = try!(self.parse_rename()) { + (Some(crate_name.name), ident) } else { (None, crate_name) }; @@ -5779,10 +5781,16 @@ impl<'a> Parser<'a> { } }).collect() }; + rename_to = try!(self.parse_rename()).unwrap_or(rename_to); + Ok(P(spanned(lo, self.last_span.hi, ViewPathSimple(rename_to, path)))) + } + + fn parse_rename(&mut self) -> PResult<Option<Ident>> { if try!(self.eat_keyword(keywords::As)) { - rename_to = try!(self.parse_ident()) + self.parse_ident().map(Some) + } else { + Ok(None) } - Ok(P(spanned(lo, self.last_span.hi, ViewPathSimple(rename_to, path)))) } /// Parses a source module as a crate. This is the main |
