1353942Sdim//===--- LangStandards.cpp - Language Standard Definitions ----------------===//
2353942Sdim//
3353942Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353942Sdim// See https://llvm.org/LICENSE.txt for license information.
5353942Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6353942Sdim//
7353942Sdim//===----------------------------------------------------------------------===//
8353942Sdim
9353942Sdim#include "clang/Basic/LangStandard.h"
10353942Sdim#include "llvm/ADT/StringSwitch.h"
11353942Sdim#include "llvm/Support/ErrorHandling.h"
12353942Sdimusing namespace clang;
13353942Sdim
14353942Sdim#define LANGSTANDARD(id, name, lang, desc, features)                           \
15353942Sdim  static const LangStandard Lang_##id = {name, desc, features, Language::lang};
16353942Sdim#include "clang/Basic/LangStandards.def"
17353942Sdim
18353942Sdimconst LangStandard &LangStandard::getLangStandardForKind(Kind K) {
19353942Sdim  switch (K) {
20353942Sdim  case lang_unspecified:
21353942Sdim    llvm::report_fatal_error("getLangStandardForKind() on unspecified kind");
22353942Sdim#define LANGSTANDARD(id, name, lang, desc, features) \
23353942Sdim    case lang_##id: return Lang_##id;
24353942Sdim#include "clang/Basic/LangStandards.def"
25353942Sdim  }
26353942Sdim  llvm_unreachable("Invalid language kind!");
27353942Sdim}
28353942Sdim
29353942SdimLangStandard::Kind LangStandard::getLangKind(StringRef Name) {
30353942Sdim  return llvm::StringSwitch<Kind>(Name)
31353942Sdim#define LANGSTANDARD(id, name, lang, desc, features) .Case(name, lang_##id)
32353942Sdim#define LANGSTANDARD_ALIAS(id, alias) .Case(alias, lang_##id)
33353942Sdim#include "clang/Basic/LangStandards.def"
34353942Sdim      .Default(lang_unspecified);
35353942Sdim}
36353942Sdim
37353942Sdimconst LangStandard *LangStandard::getLangStandardForName(StringRef Name) {
38353942Sdim  Kind K = getLangKind(Name);
39353942Sdim  if (K == lang_unspecified)
40353942Sdim    return nullptr;
41353942Sdim
42353942Sdim  return &getLangStandardForKind(K);
43353942Sdim}
44353942Sdim
45353942Sdim
46