diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2014-08-12 19:25:05 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2014-08-14 13:24:50 -0700 |
| commit | 1c16accfc204b447b128ed17545e88d947144682 (patch) | |
| tree | c1dded87a5073e546f314996488e86f57cc8a924 /src/libsyntax | |
| parent | 404978ea722c0257cc763540c93243e8a21f82ed (diff) | |
| download | rust-1c16accfc204b447b128ed17545e88d947144682.tar.gz rust-1c16accfc204b447b128ed17545e88d947144682.zip | |
libsyntax: Accept `use foo as bar;` in lieu of `use bar as foo;`
The old syntax will be removed after a snapshot. RFC #47. Issue #16461.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 12 |
3 files changed, 16 insertions, 8 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 7d9a23e91ba..d93b2800879 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1114,11 +1114,11 @@ pub type ViewPath = Spanned<ViewPath_>; #[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)] pub enum ViewPath_ { - /// `quux = foo::bar::baz` + /// `foo::bar::baz as quux` /// /// or just /// - /// `foo::bar::baz ` (with 'baz =' implicitly on the left) + /// `foo::bar::baz` (with `as baz` implicitly on the right) ViewPathSimple(Ident, Path, NodeId), /// `foo::bar::*` diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index f6db577a004..50db5029904 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -5309,6 +5309,7 @@ impl<'a> Parser<'a> { match self.token { token::EQ => { // x = foo::bar + // NOTE(stage0, #16461, pcwalton): Deprecate after snapshot. self.bump(); let path_lo = self.span.lo; path = vec!(self.parse_ident()); @@ -5391,7 +5392,7 @@ impl<'a> Parser<'a> { } _ => () } - let last = *path.get(path.len() - 1u); + let mut rename_to = *path.get(path.len() - 1u); let path = ast::Path { span: mk_sp(lo, self.span.hi), global: false, @@ -5403,9 +5404,12 @@ impl<'a> Parser<'a> { } }).collect() }; + if self.eat_keyword(keywords::As) { + rename_to = self.parse_ident() + } return box(GC) spanned(lo, self.last_span.hi, - ViewPathSimple(last, path, ast::DUMMY_NODE_ID)); + ViewPathSimple(rename_to, path, ast::DUMMY_NODE_ID)); } /// Parses a sequence of items. Stops when it finds program diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 4ee73406f03..be4043bd73b 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -2262,13 +2262,17 @@ impl<'a> State<'a> { pub fn print_view_path(&mut self, vp: &ast::ViewPath) -> IoResult<()> { match vp.node { ast::ViewPathSimple(ident, ref path, _) => { + try!(self.print_path(path, false)); + // FIXME(#6993) can't compare identifiers directly here - if path.segments.last().unwrap().identifier.name != ident.name { - try!(self.print_ident(ident)); + if path.segments.last().unwrap().identifier.name != + ident.name { try!(space(&mut self.s)); - try!(self.word_space("=")); + try!(self.word_space("as")); + try!(self.print_ident(ident)); } - self.print_path(path, false) + + Ok(()) } ast::ViewPathGlob(ref path, _) => { |
