]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Add new keyword utility class
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Wed, 8 Nov 2023 09:50:00 +0000 (10:50 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 18:13:13 +0000 (19:13 +0100)
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>
gcc/rust/Make-lang.in
gcc/rust/util/rust-keyword-values.cc [new file with mode: 0644]
gcc/rust/util/rust-keyword-values.h [new file with mode: 0644]

index 1ff179fc2dfc23a0fb201e1a4629af5f0fa72f7d..f2cadd55eed00d97af49013fd96dfaf5338bf810 100644 (file)
@@ -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 (file)
index 0000000..29bc65e
--- /dev/null
@@ -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 (file)
index 0000000..cf50790
--- /dev/null
@@ -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 */