aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-11-08 10:50:00 +0100
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 19:13:13 +0100
commit0344e23236c8e28b80ce1b14a3a4394918953f2e (patch)
tree2f3179ab85b009befa9e649a4bac476c683223ec /gcc/rust
parent65de922f9bdb52b308430d2ae11b99c2c98db053 (diff)
downloadgcc-0344e23236c8e28b80ce1b14a3a4394918953f2e.zip
gcc-0344e23236c8e28b80ce1b14a3a4394918953f2e.tar.gz
gcc-0344e23236c8e28b80ce1b14a3a4394918953f2e.tar.bz2
gccrs: Add new keyword utility class
Much like attributes values, keywords are known beforehand and never change. Instead of relying on handcrafted string we could centralize everything in one place. We may require to check whether a word is a keyword, which can now be done easily thanks to the keyword set. gcc/rust/ChangeLog: * Make-lang.in: Add rust-keyword-values.cc to the list. * util/rust-keyword-values.cc: New file. * util/rust-keyword-values.h: New file. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc/rust')
-rw-r--r--gcc/rust/Make-lang.in1
-rw-r--r--gcc/rust/util/rust-keyword-values.cc33
-rw-r--r--gcc/rust/util/rust-keyword-values.h45
3 files changed, 79 insertions, 0 deletions
diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in
index 1ff179f..f2cadd5 100644
--- a/gcc/rust/Make-lang.in
+++ b/gcc/rust/Make-lang.in
@@ -100,6 +100,7 @@ GRS_OBJS = \
rust/rust-hir.o \
rust/rust-hir-map.o \
rust/rust-attributes.o \
+ rust/rust-keyword-values.o \
rust/rust-abi.o \
rust/rust-token-converter.o \
rust/rust-macro.o \
diff --git a/gcc/rust/util/rust-keyword-values.cc b/gcc/rust/util/rust-keyword-values.cc
new file mode 100644
index 0000000..29bc65e
--- /dev/null
+++ b/gcc/rust/util/rust-keyword-values.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+// This file is part of GCC.
+
+// GCC is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3, or (at your option) any later
+// version.
+
+// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with GCC; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include "rust-keyword-values.h"
+
+namespace Rust {
+namespace Values {
+
+const std::set<std::string> Keywords::keywords = {
+#define RS_TOKEN(x, y)
+#define RS_TOKEN_KEYWORD(tok, key) key,
+ RS_TOKEN_LIST
+#undef RS_TOKEN_KEYWORD
+#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
new file mode 100644
index 0000000..cf50790
--- /dev/null
+++ b/gcc/rust/util/rust-keyword-values.h
@@ -0,0 +1,45 @@
+// Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+// This file is part of GCC.
+
+// GCC is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3, or (at your option) any later
+// version.
+
+// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with GCC; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#ifndef RUST_KEYWORD_VALUES_H
+#define RUST_KEYWORD_VALUES_H
+
+#include "rust-token.h"
+
+namespace Rust {
+namespace Values {
+
+// TODO: Change this to a namespace + inline constexpr in the future
+class Keywords
+{
+public:
+ const static std::set<std::string> keywords;
+
+ // Rust keyword values
+public:
+#define RS_TOKEN(x, y)
+#define RS_TOKEN_KEYWORD(tok, key) static constexpr auto &tok = key;
+ RS_TOKEN_LIST
+#undef RS_TOKEN_KEYWORD
+#undef RS_TOKEN
+};
+
+} // namespace Values
+} // namespace Rust
+
+#endif /* !RUST_KEYWORD_VALUES_H */