https://gcc.gnu.org/g:f46fd401949ece4cc691c80a05e0038f715a49c1

commit f46fd401949ece4cc691c80a05e0038f715a49c1
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Wed Nov 8 15:22:33 2023 +0100

    Use keyword const values instead of raw values
    
    Change the keyword values from a raw string value to their matching const
    value in utils.
    
    gcc/rust/ChangeLog:
    
            * lex/rust-lex.cc (Lexer::parse_raw_identifier): Use const value.
            * parse/rust-parse-impl.h (Parser::parse_simple_path_segment):
            Likewise.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Diff:
---
 gcc/rust/lex/rust-lex.cc         | 9 +++++++--
 gcc/rust/parse/rust-parse-impl.h | 8 +++++---
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/gcc/rust/lex/rust-lex.cc b/gcc/rust/lex/rust-lex.cc
index 19e2370f1b55..ee44e8d968fa 100644
--- a/gcc/rust/lex/rust-lex.cc
+++ b/gcc/rust/lex/rust-lex.cc
@@ -1938,8 +1938,13 @@ Lexer::parse_raw_identifier (location_t loc)
     rust_error_at (get_current_location (),
                   "%<_%> is not a valid raw identifier");
 
-  if (str == "crate" || str == "extern" || str == "self" || str == "super"
-      || str == "Self")
+  using namespace Rust::Values;
+  std::set<std::string> invalid{
+    Keywords::CRATE, Keywords::EXTERN_TOK, Keywords::SELF,
+    Keywords::SUPER, Keywords::SELF_ALIAS,
+  };
+
+  if (invalid.find (str) != invalid.end ())
     {
       rust_error_at (get_current_location (),
                     "%qs is a forbidden raw identifier", str.c_str ());
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index e1d73887d864..44b4d7412648 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -28,6 +28,7 @@
 #include "rust-make-unique.h"
 #include "rust-dir-owner.h"
 #include "rust-attribute-values.h"
+#include "rust-keyword-values.h"
 
 #include "optional.h"
 
@@ -682,6 +683,7 @@ template <typename ManagedTokenSource>
 AST::SimplePathSegment
 Parser<ManagedTokenSource>::parse_simple_path_segment ()
 {
+  using namespace Values;
   const_TokenPtr t = lexer.peek_token ();
   switch (t->get_id ())
     {
@@ -692,15 +694,15 @@ Parser<ManagedTokenSource>::parse_simple_path_segment ()
     case SUPER:
       lexer.skip_token ();
 
-      return AST::SimplePathSegment ("super", t->get_locus ());
+      return AST::SimplePathSegment (Keywords::SUPER, t->get_locus ());
     case SELF:
       lexer.skip_token ();
 
-      return AST::SimplePathSegment ("self", t->get_locus ());
+      return AST::SimplePathSegment (Keywords::SELF, t->get_locus ());
     case CRATE:
       lexer.skip_token ();
 
-      return AST::SimplePathSegment ("crate", t->get_locus ());
+      return AST::SimplePathSegment (Keywords::CRATE, t->get_locus ());
     case DOLLAR_SIGN:
       if (lexer.peek_token (1)->get_id () == CRATE)
        {

Reply via email to