aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/rust/lex/rust-lex.cc2
-rw-r--r--gcc/rust/lex/rust-token.h2
-rw-r--r--gcc/rust/util/rust-keyword-values.cc13
-rw-r--r--gcc/rust/util/rust-keyword-values.h13
4 files changed, 24 insertions, 6 deletions
diff --git a/gcc/rust/lex/rust-lex.cc b/gcc/rust/lex/rust-lex.cc
index 6936576..910ad07 100644
--- a/gcc/rust/lex/rust-lex.cc
+++ b/gcc/rust/lex/rust-lex.cc
@@ -260,7 +260,7 @@ Lexer::replace_current_token (TokenPtr replacement)
TokenId
Lexer::classify_keyword (const std::string &str)
{
- auto &keywords = Rust::Values::Keywords::keywords;
+ auto &keywords = Rust::Values::Keywords::keywords_tokens;
auto keyword = keywords.find (str);
if (keyword == keywords.end ())
diff --git a/gcc/rust/lex/rust-token.h b/gcc/rust/lex/rust-token.h
index 5762cbe..35304d9 100644
--- a/gcc/rust/lex/rust-token.h
+++ b/gcc/rust/lex/rust-token.h
@@ -145,7 +145,6 @@ enum PrimitiveCoreType
/* Doc Comments */ \
RS_TOKEN (INNER_DOC_COMMENT, "#![doc]") \
RS_TOKEN (OUTER_DOC_COMMENT, "#[doc]") \
- /* have "weak" union and 'static keywords? */ \
RS_TOKEN_KEYWORD_2015 (ABSTRACT, "abstract") /* unused */ \
RS_TOKEN_KEYWORD_2015 (AS, "as") \
RS_TOKEN_KEYWORD_2018 (ASYNC, "async") /* unused */ \
@@ -157,7 +156,6 @@ enum PrimitiveCoreType
RS_TOKEN_KEYWORD_2015 (CONST, "const") \
RS_TOKEN_KEYWORD_2015 (CONTINUE, "continue") \
RS_TOKEN_KEYWORD_2015 (CRATE, "crate") \
- /* FIXME: Do we need to add $crate (DOLLAR_CRATE) as a reserved kw? */ \
RS_TOKEN_KEYWORD_2015 (DO, "do") /* unused */ \
RS_TOKEN_KEYWORD_2018 (DYN, "dyn") \
RS_TOKEN_KEYWORD_2015 (ELSE, "else") \
diff --git a/gcc/rust/util/rust-keyword-values.cc b/gcc/rust/util/rust-keyword-values.cc
index 8aa5ef1..9e1d2bc 100644
--- a/gcc/rust/util/rust-keyword-values.cc
+++ b/gcc/rust/util/rust-keyword-values.cc
@@ -38,7 +38,18 @@ get_keywords ()
return m;
}
-const std::map<std::string, TokenId> Keywords::keywords = get_keywords ();
+const std::map<std::string, TokenId> Keywords::keywords_tokens
+ = get_keywords ();
+
+const std::set<std::string> Keywords::keywords = {
+#define RS_TOKEN(x, y)
+#define RS_TOKEN_KEYWORD_2015(tok, key) {key},
+#define RS_TOKEN_KEYWORD_2018 RS_TOKEN_KEYWORD_2015
+ RS_KEYWORD_LIST
+#undef RS_TOKEN_KEYWORD_2015
+#undef RS_TOKEN_KEYWORD_2018
+#undef RS_TOKEN
+};
} // namespace Values
} // namespace Rust
diff --git a/gcc/rust/util/rust-keyword-values.h b/gcc/rust/util/rust-keyword-values.h
index 4a6f1df..01c98a2 100644
--- a/gcc/rust/util/rust-keyword-values.h
+++ b/gcc/rust/util/rust-keyword-values.h
@@ -21,6 +21,14 @@
#include "rust-token.h"
+// Append keywords made from multiple tokens to the existing token-keyword list
+#define RS_KEYWORD_LIST \
+ RS_TOKEN_LIST \
+ RS_TOKEN_KEYWORD_2015 (DOLLAR_CRATE, "$crate") \
+ RS_TOKEN_KEYWORD_2015 (PATH_ROOT, "{{root}}") \
+ RS_TOKEN_KEYWORD_2015 (STATIC_LIFETIME, "'static") \
+ RS_TOKEN_KEYWORD_2015 (UNDERSCORE_LIFETIME, "'_")
+
namespace Rust {
namespace Values {
@@ -28,14 +36,15 @@ namespace Values {
class Keywords
{
public:
- const static std::map<std::string, TokenId> keywords;
+ const static std::map<std::string, TokenId> keywords_tokens;
+ const static std::set<std::string> keywords;
// Rust keyword values
public:
#define RS_TOKEN(x, y)
#define RS_TOKEN_KEYWORD_2015(tok, key) static constexpr auto &tok = key;
#define RS_TOKEN_KEYWORD_2018 RS_TOKEN_KEYWORD_2015
- RS_TOKEN_LIST
+ RS_KEYWORD_LIST
#undef RS_TOKEN_KEYWORD_2015
#undef RS_TOKEN_KEYWORD_2018
#undef RS_TOKEN