public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/rust/master] add Location to AST::Visibility
@ 2022-11-18 23:33 Thomas Schwinge
  0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2022-11-18 23:33 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:1531256aa661c8007c9bc6a496f5224bed55fe3a

commit 1531256aa661c8007c9bc6a496f5224bed55fe3a
Author: Dave <dme2223@gmail.com>
Date:   Wed Nov 9 23:17:50 2022 -0600

    add Location to AST::Visibility

Diff:
---
 gcc/rust/ast/rust-item.h          | 28 ++++++++++++++++------------
 gcc/rust/hir/rust-ast-lower.cc    |  5 +++--
 gcc/rust/hir/tree/rust-hir-item.h |  9 +++++----
 3 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h
index 20f1b93d948..e9826bd0e15 100644
--- a/gcc/rust/ast/rust-item.h
+++ b/gcc/rust/ast/rust-item.h
@@ -625,14 +625,14 @@ private:
   VisType vis_type;
   // Only assigned if vis_type is IN_PATH
   SimplePath in_path;
+  Location locus;
 
   // should this store location info?
 
 public:
   // Creates a Visibility - TODO make constructor protected or private?
-  Visibility (VisType vis_type, SimplePath in_path)
-    : vis_type (vis_type), in_path (std::move (in_path))
-  {}
+  Visibility(VisType vis_type, SimplePath in_path, Location locus = Location())
+      : vis_type(vis_type), in_path(std::move(in_path)), locus(locus) {}
 
   VisType get_vis_type () const { return vis_type; }
 
@@ -648,6 +648,8 @@ public:
   // Returns whether visibility is public or not.
   bool is_public () const { return vis_type != PRIV && !is_error (); }
 
+  Location get_locus() const { return locus; }
+
   // Creates an error visibility.
   static Visibility create_error ()
   {
@@ -671,22 +673,24 @@ public:
   // Creates a public visibility with crate-relative paths
   static Visibility create_crate (Location crate_tok_location)
   {
-    return Visibility (PUB_CRATE,
-		       SimplePath::from_str ("crate", crate_tok_location));
+    return Visibility(PUB_CRATE,
+                      SimplePath::from_str("crate", crate_tok_location),
+                      crate_tok_location);
   }
 
   // Creates a public visibility with self-relative paths
   static Visibility create_self (Location self_tok_location)
   {
-    return Visibility (PUB_SELF,
-		       SimplePath::from_str ("self", self_tok_location));
+    return Visibility(PUB_SELF, SimplePath::from_str("self", self_tok_location),
+                      self_tok_location);
   }
 
   // Creates a public visibility with parent module-relative paths
   static Visibility create_super (Location super_tok_location)
   {
-    return Visibility (PUB_SUPER,
-		       SimplePath::from_str ("super", super_tok_location));
+    return Visibility(PUB_SUPER,
+                      SimplePath::from_str("super", super_tok_location),
+                      super_tok_location);
   }
 
   // Creates a private visibility
@@ -698,7 +702,7 @@ public:
   // Creates a public visibility with a given path or whatever.
   static Visibility create_in_path (SimplePath in_path)
   {
-    return Visibility (PUB_IN_PATH, std::move (in_path));
+    return Visibility(PUB_IN_PATH, std::move(in_path), in_path.get_locus());
   }
 
   std::string as_string () const;
@@ -3836,8 +3840,8 @@ class ExternalItem
 public:
   virtual ~ExternalItem () {}
 
-  /* TODO: spec syntax rules state that "MacroInvocationSemi" can be used as 
-   * ExternalItem, but text body isn't so clear. Adding MacroInvocationSemi 
+  /* TODO: spec syntax rules state that "MacroInvocationSemi" can be used as
+   * ExternalItem, but text body isn't so clear. Adding MacroInvocationSemi
    * support would require a lot of refactoring. */
 
   // Returns whether item has outer attributes.
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index 52b7003a04a..9ac3674faa7 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -49,8 +49,9 @@ translate_visibility (const AST::Visibility &vis)
     case AST::Visibility::PUB_CRATE:
     case AST::Visibility::PUB_SUPER:
     case AST::Visibility::PUB_IN_PATH:
-      return Visibility (Visibility::VisType::RESTRICTED,
-			 ASTLoweringSimplePath::translate (vis.get_path ()));
+      return Visibility(Visibility::VisType::RESTRICTED,
+                        ASTLoweringSimplePath::translate(vis.get_path()),
+                        vis.get_locus());
       break;
     }
 
diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h
index d84e41e81ee..0a8e688d391 100644
--- a/gcc/rust/hir/tree/rust-hir-item.h
+++ b/gcc/rust/hir/tree/rust-hir-item.h
@@ -571,14 +571,15 @@ public:
 private:
   VisType vis_type;
   HIR::SimplePath path;
+  Location locus;
 
   // should this store location info?
 
 public:
-  Visibility (VisType vis_type,
-	      HIR::SimplePath path = HIR::SimplePath::create_empty ())
-    : vis_type (vis_type), path (std::move (path))
-  {}
+  Visibility(VisType vis_type,
+             HIR::SimplePath path = HIR::SimplePath::create_empty(),
+             Location locus = Location())
+      : vis_type(vis_type), path(std::move(path)), locus(locus) {}
 
   // Returns whether visibility is in an error state.
   bool is_error () const { return vis_type == ERROR; }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-18 23:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-18 23:33 [gcc/devel/rust/master] add Location to AST::Visibility Thomas Schwinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).