about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSeiichi Uchida <seuchida@gmail.com>2018-01-27 16:15:00 +0900
committerSeiichi Uchida <seuchida@gmail.com>2018-02-18 00:10:40 +0900
commit0bddba9248674fe9fde68d3e31fcc9afee7b505c (patch)
treef4f331479bbc1cfe706d9b167dfbfcf560fb95a1 /src
parent01a70c65892eea8cdf9d6a5f72ea003897eb61c6 (diff)
downloadrust-0bddba9248674fe9fde68d3e31fcc9afee7b505c.tar.gz
rust-0bddba9248674fe9fde68d3e31fcc9afee7b505c.zip
Add a span field to Visibility::Restricted
This span covers the whole visibility expression: e.g. `pub (in path)`.
Diffstat (limited to 'src')
-rw-r--r--src/librustc/hir/lowering.rs2
-rw-r--r--src/librustc_resolve/lib.rs2
-rw-r--r--src/libsyntax/ast.rs2
-rw-r--r--src/libsyntax/fold.rs5
-rw-r--r--src/libsyntax/parse/parser.rs12
-rw-r--r--src/libsyntax/visit.rs2
6 files changed, 17 insertions, 8 deletions
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs
index 55dcb16c3c9..e8969e7e3cb 100644
--- a/src/librustc/hir/lowering.rs
+++ b/src/librustc/hir/lowering.rs
@@ -3365,7 +3365,7 @@ impl<'a> LoweringContext<'a> {
         match *v {
             Visibility::Public => hir::Public,
             Visibility::Crate(..) => hir::Visibility::Crate,
-            Visibility::Restricted { ref path, id } => {
+            Visibility::Restricted { ref path, id, .. } => {
                 hir::Visibility::Restricted {
                     path: P(self.lower_path(id, path, ParamMode::Explicit, true)),
                     id: if let Some(owner) = explicit_owner {
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 2da4bfedd3a..37016ee9cf9 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -3802,7 +3802,7 @@ impl<'a> Resolver<'a> {
             ast::Visibility::Inherited => {
                 ty::Visibility::Restricted(self.current_module.normal_ancestor_id)
             }
-            ast::Visibility::Restricted { ref path, id } => {
+            ast::Visibility::Restricted { ref path, id, .. } => {
                 let def = self.smart_resolve_path(id, None, path,
                                                   PathSource::Visibility).base_def();
                 if def == Def::Err {
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index c7ab6158256..54b6e166e39 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -1941,7 +1941,7 @@ pub enum CrateSugar {
 pub enum Visibility {
     Public,
     Crate(Span, CrateSugar),
-    Restricted { path: P<Path>, id: NodeId },
+    Restricted { path: P<Path>, id: NodeId, span: Span },
     Inherited,
 }
 
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index 921ed3565a4..9e51379a9ee 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -1368,9 +1368,10 @@ pub fn noop_fold_stmt_kind<T: Folder>(node: StmtKind, folder: &mut T) -> SmallVe
 
 pub fn noop_fold_vis<T: Folder>(vis: Visibility, folder: &mut T) -> Visibility {
     match vis {
-        Visibility::Restricted { path, id } => Visibility::Restricted {
+        Visibility::Restricted { path, id, span } => Visibility::Restricted {
             path: path.map(|path| folder.fold_path(path)),
-            id: folder.new_id(id)
+            id: folder.new_id(id),
+            span: folder.new_span(span),
         },
         _ => vis,
     }
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index effc5f75f6a..230c0bff917 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -5710,8 +5710,12 @@ impl<'a> Parser<'a> {
                 self.bump(); // `(`
                 self.bump(); // `in`
                 let path = self.parse_path(PathStyle::Mod)?.default_to_global(); // `path`
-                let vis = Visibility::Restricted { path: P(path), id: ast::DUMMY_NODE_ID };
                 self.expect(&token::CloseDelim(token::Paren))?; // `)`
+                let vis = Visibility::Restricted {
+                    path: P(path),
+                    id: ast::DUMMY_NODE_ID,
+                    span: self.prev_span,
+                };
                 return Ok(vis)
             } else if self.look_ahead(2, |t| t == &token::CloseDelim(token::Paren)) &&
                       self.look_ahead(1, |t| t.is_keyword(keywords::Super) ||
@@ -5720,8 +5724,12 @@ impl<'a> Parser<'a> {
                 // `pub(self)` or `pub(super)`
                 self.bump(); // `(`
                 let path = self.parse_path(PathStyle::Mod)?.default_to_global(); // `super`/`self`
-                let vis = Visibility::Restricted { path: P(path), id: ast::DUMMY_NODE_ID };
                 self.expect(&token::CloseDelim(token::Paren))?; // `)`
+                let vis = Visibility::Restricted {
+                    path: P(path),
+                    id: ast::DUMMY_NODE_ID,
+                    span: self.prev_span,
+                };
                 return Ok(vis)
             } else if !can_take_tuple {  // Provide this diagnostic if this is not a tuple struct
                 // `pub(something) fn ...` or `struct X { pub(something) y: Z }`
diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs
index bbb123dab28..14679a9ebd1 100644
--- a/src/libsyntax/visit.rs
+++ b/src/libsyntax/visit.rs
@@ -811,7 +811,7 @@ pub fn walk_arm<'a, V: Visitor<'a>>(visitor: &mut V, arm: &'a Arm) {
 }
 
 pub fn walk_vis<'a, V: Visitor<'a>>(visitor: &mut V, vis: &'a Visibility) {
-    if let Visibility::Restricted { ref path, id } = *vis {
+    if let Visibility::Restricted { ref path, id, .. } = *vis {
         visitor.visit_path(path, id);
     }
 }