| // Protocol Buffers - Google's data interchange format |
| // Copyright 2023 Google LLC. All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file or at |
| // https://developers.google.com/open-source/licenses/bsd |
| |
| #include "upb_generator/keywords.h" |
| |
| #include <string> |
| #include <unordered_set> |
| |
| namespace upb { |
| namespace generator { |
| |
| static const char* const kKeywordList[] = { |
| // |
| "NULL", |
| "alignas", |
| "alignof", |
| "and", |
| "and_eq", |
| "asm", |
| "auto", |
| "bitand", |
| "bitor", |
| "bool", |
| "break", |
| "case", |
| "catch", |
| "char", |
| "class", |
| "compl", |
| "const", |
| "constexpr", |
| "const_cast", |
| "continue", |
| "decltype", |
| "default", |
| "delete", |
| "do", |
| "double", |
| "dynamic_cast", |
| "else", |
| "enum", |
| "explicit", |
| "export", |
| "extern", |
| "false", |
| "float", |
| "for", |
| "friend", |
| "goto", |
| "if", |
| "inline", |
| "int", |
| "long", |
| "mutable", |
| "namespace", |
| "new", |
| "noexcept", |
| "not", |
| "not_eq", |
| "nullptr", |
| "operator", |
| "or", |
| "or_eq", |
| "private", |
| "protected", |
| "public", |
| "register", |
| "reinterpret_cast", |
| "return", |
| "short", |
| "signed", |
| "sizeof", |
| "static", |
| "static_assert", |
| "static_cast", |
| "struct", |
| "switch", |
| "template", |
| "this", |
| "thread_local", |
| "throw", |
| "true", |
| "try", |
| "typedef", |
| "typeid", |
| "typename", |
| "union", |
| "unsigned", |
| "using", |
| "virtual", |
| "void", |
| "volatile", |
| "wchar_t", |
| "while", |
| "xor", |
| "xor_eq", |
| "char8_t", |
| "char16_t", |
| "char32_t", |
| "concept", |
| "consteval", |
| "constinit", |
| "co_await", |
| "co_return", |
| "co_yield", |
| "requires", |
| }; |
| |
| static std::unordered_set<std::string>* MakeKeywordsMap() { |
| auto* result = new std::unordered_set<std::string>(); |
| for (const auto keyword : kKeywordList) { |
| result->emplace(keyword); |
| } |
| return result; |
| } |
| |
| static std::unordered_set<std::string>& kKeywords = *MakeKeywordsMap(); |
| |
| std::string ResolveKeywordConflict(const std::string& name) { |
| if (kKeywords.count(name) > 0) { |
| return name + "_"; |
| } |
| return name; |
| } |
| |
| } // namespace generator |
| } // namespace upb |