LangStandards.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //===--- LangStandards.cpp - Language Standard Definitions ----------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "clang/Frontend/LangStandard.h"
  10. #include "llvm/ADT/StringSwitch.h"
  11. #include "llvm/Support/ErrorHandling.h"
  12. using namespace clang;
  13. using namespace clang::frontend;
  14. #define LANGSTANDARD(id, name, desc, features) \
  15. static const LangStandard Lang_##id = { name, desc, features };
  16. #include "clang/Frontend/LangStandards.def"
  17. const LangStandard &LangStandard::getLangStandardForKind(Kind K) {
  18. switch (K) {
  19. case lang_unspecified:
  20. llvm::report_fatal_error("getLangStandardForKind() on unspecified kind");
  21. #define LANGSTANDARD(id, name, desc, features) \
  22. case lang_##id: return Lang_##id;
  23. #include "clang/Frontend/LangStandards.def"
  24. }
  25. llvm_unreachable("Invalid language kind!");
  26. }
  27. const LangStandard *LangStandard::getLangStandardForName(StringRef Name) {
  28. Kind K = llvm::StringSwitch<Kind>(Name)
  29. #define LANGSTANDARD(id, name, desc, features) \
  30. .Case(name, lang_##id)
  31. #include "clang/Frontend/LangStandards.def"
  32. .Default(lang_unspecified);
  33. if (K == lang_unspecified)
  34. return nullptr;
  35. return &getLangStandardForKind(K);
  36. }