summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-08-10 20:24:06 +0000
committerbors <bors@rust-lang.org>2015-08-10 20:24:06 +0000
commit8856927f649d9ce80ff52377ac2389a2798a7033 (patch)
treee473c97032df74a645b8c13fac35ec786e5046b0 /src/libsyntax/parse
parent3d69bec88119e0471a98cd2075fcf53c43ebca3e (diff)
parentcfcd449c4c36c68541c3389878e3262dac5e4746 (diff)
downloadrust-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.rs20
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