diff options
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 18 | ||||
| -rw-r--r-- | src/libsyntax/ast_util.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ext/build.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 18 | ||||
| -rw-r--r-- | src/libsyntax/lib.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 16 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 9 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 7 |
8 files changed, 49 insertions, 25 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 394d4a82516..7ad9a18a15e 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1033,12 +1033,20 @@ pub struct Variant_ { pub type Variant = Spanned<Variant_>; #[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)] -pub struct PathListIdent_ { - pub name: Ident, - pub id: NodeId, +pub enum PathListItem_ { + PathListIdent { pub name: Ident, pub id: NodeId }, + PathListMod { pub id: NodeId } +} + +impl PathListItem_ { + pub fn id(&self) -> NodeId { + match *self { + PathListIdent { id, .. } | PathListMod { id } => id + } + } } -pub type PathListIdent = Spanned<PathListIdent_>; +pub type PathListItem = Spanned<PathListItem_>; pub type ViewPath = Spanned<ViewPath_>; @@ -1056,7 +1064,7 @@ pub enum ViewPath_ { ViewPathGlob(Path, NodeId), /// `foo::bar::{a,b,c}` - ViewPathList(Path, Vec<PathListIdent> , NodeId) + ViewPathList(Path, Vec<PathListItem> , NodeId) } #[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)] diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs index 3b4f6a6e0f8..99726da69c9 100644 --- a/src/libsyntax/ast_util.rs +++ b/src/libsyntax/ast_util.rs @@ -405,7 +405,7 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> { ViewPathList(_, ref paths, node_id) => { self.operation.visit_id(node_id); for path in paths.iter() { - self.operation.visit_id(path.node.id) + self.operation.visit_id(path.node.id()) } } } diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 4d3913da365..7d683382589 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -1045,7 +1045,7 @@ impl<'a> AstBuilder for ExtCtxt<'a> { fn view_use_list(&self, sp: Span, vis: ast::Visibility, path: Vec<ast::Ident> , imports: &[ast::Ident]) -> ast::ViewItem { let imports = imports.iter().map(|id| { - respan(sp, ast::PathListIdent_ { name: *id, id: ast::DUMMY_NODE_ID }) + respan(sp, ast::PathListIdent { name: *id, id: ast::DUMMY_NODE_ID }) }).collect(); self.view_use(sp, vis, diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 5417991c9df..e31ec048653 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -55,17 +55,17 @@ pub trait Folder { let id = self.new_id(node_id); ViewPathList(self.fold_path(path), path_list_idents.iter().map(|path_list_ident| { - let id = self.new_id(path_list_ident.node - .id); Spanned { - node: PathListIdent_ { - name: path_list_ident.node - .name - .clone(), - id: id, + node: match path_list_ident.node { + PathListIdent { id, name } => + PathListIdent { + id: self.new_id(id), + name: name.clone() + }, + PathListMod { id } => + PathListMod { id: self.new_id(id) } }, - span: self.new_span( - path_list_ident.span) + span: self.new_span(path_list_ident.span) } }).collect(), id) diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs index 8b9cb086949..13d2a632f36 100644 --- a/src/libsyntax/lib.rs +++ b/src/libsyntax/lib.rs @@ -24,7 +24,7 @@ html_root_url = "http://doc.rust-lang.org/master/")] #![feature(macro_rules, globs, managed_boxes, default_type_params, phase)] -#![feature(quote, unsafe_destructor)] +#![feature(quote, struct_variant, unsafe_destructor)] #![allow(deprecated)] extern crate fmt_macros; diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 394288bd9f2..73de47e7b12 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -537,12 +537,16 @@ impl<'a> Parser<'a> { } } - pub fn parse_path_list_ident(&mut self) -> ast::PathListIdent { + pub fn parse_path_list_item(&mut self) -> ast::PathListItem { let lo = self.span.lo; - let ident = self.parse_ident(); + let node = if self.eat_keyword(keywords::Mod) { + ast::PathListMod { id: ast::DUMMY_NODE_ID } + } else { + let ident = self.parse_ident(); + ast::PathListIdent { name: ident, id: ast::DUMMY_NODE_ID } + }; let hi = self.last_span.hi; - spanned(lo, hi, ast::PathListIdent_ { name: ident, - id: ast::DUMMY_NODE_ID }) + spanned(lo, hi, node) } /// Consume token 'tok' if it exists. Returns true if the given @@ -5176,7 +5180,7 @@ impl<'a> Parser<'a> { let idents = self.parse_unspanned_seq( &token::LBRACE, &token::RBRACE, seq_sep_trailing_allowed(token::COMMA), - |p| p.parse_path_list_ident()); + |p| p.parse_path_list_item()); let path = ast::Path { span: mk_sp(lo, self.span.hi), global: false, @@ -5232,7 +5236,7 @@ impl<'a> Parser<'a> { &token::LBRACE, &token::RBRACE, seq_sep_trailing_allowed(token::COMMA), - |p| p.parse_path_list_ident() + |p| p.parse_path_list_item() ); let path = ast::Path { span: mk_sp(lo, self.span.hi), diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index dd96118ea49..305e67a916e 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -2182,7 +2182,14 @@ impl<'a> State<'a> { try!(word(&mut self.s, "::{")); } try!(self.commasep(Inconsistent, idents.as_slice(), |s, w| { - s.print_ident(w.node.name) + match w.node { + ast::PathListIdent { name, .. } => { + s.print_ident(name) + }, + ast::PathListMod { .. } => { + word(&mut s.s, "mod") + } + } })); word(&mut self.s, "}") } diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index d5fb75a4d69..3c6f06ddfc3 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -186,7 +186,12 @@ pub fn walk_view_item<E: Clone, V: Visitor<E>>(visitor: &mut V, vi: &ViewItem, e } ViewPathList(ref path, ref list, _) => { for id in list.iter() { - visitor.visit_ident(id.span, id.node.name, env.clone()) + match id.node { + PathListIdent { name, .. } => { + visitor.visit_ident(id.span, name, env.clone()); + } + PathListMod { .. } => () + } } walk_path(visitor, path, env.clone()); } |
