LangStandards.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //===--- LangStandards.cpp - Language Standard Definitions ----------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. #include "clang/Basic/LangStandard.h"
  9. #include "llvm/ADT/StringSwitch.h"
  10. #include "llvm/Support/ErrorHandling.h"
  11. using namespace clang;
  12. #define LANGSTANDARD(id, name, lang, desc, features) \
  13. static const LangStandard Lang_##id = {name, desc, features, Language::lang};
  14. #include "clang/Basic/LangStandards.def"
  15. const LangStandard &LangStandard::getLangStandardForKind(Kind K) {
  16. switch (K) {
  17. case lang_unspecified:
  18. llvm::report_fatal_error("getLangStandardForKind() on unspecified kind");
  19. #define LANGSTANDARD(id, name, lang, desc, features) \
  20. case lang_##id: return Lang_##id;
  21. #include "clang/Basic/LangStandards.def"
  22. }
  23. llvm_unreachable("Invalid language kind!");
  24. }
  25. LangStandard::Kind LangStandard::getLangKind(StringRef Name) {
  26. return llvm::StringSwitch<Kind>(Name)
  27. #define LANGSTANDARD(id, name, lang, desc, features) .Case(name, lang_##id)
  28. #define LANGSTANDARD_ALIAS(id, alias) .Case(alias, lang_##id)
  29. #include "clang/Basic/LangStandards.def"
  30. .Default(lang_unspecified);
  31. }
  32. const LangStandard *LangStandard::getLangStandardForName(StringRef Name) {
  33. Kind K = getLangKind(Name);
  34. if (K == lang_unspecified)
  35. return nullptr;
  36. return &getLangStandardForKind(K);
  37. }