From 0344e23236c8e28b80ce1b14a3a4394918953f2e Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Wed, 8 Nov 2023 10:50:00 +0100 Subject: [PATCH] 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 --- gcc/rust/Make-lang.in | 1 + gcc/rust/util/rust-keyword-values.cc | 33 ++++++++++++++++++++ gcc/rust/util/rust-keyword-values.h | 45 ++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 gcc/rust/util/rust-keyword-values.cc create mode 100644 gcc/rust/util/rust-keyword-values.h diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in index 1ff179fc2dfc..f2cadd55eed0 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 000000000000..29bc65eba766 --- /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 +// . + +#include "rust-keyword-values.h" + +namespace Rust { +namespace Values { + +const std::set 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 000000000000..cf507909d204 --- /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 +// . + +#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 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 */ -- 2.43.5