// 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 |