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