1199990Srdivacky//===--- LangStandards.cpp - Language Standard Definitions ----------------===//
2199990Srdivacky//
3199990Srdivacky//                     The LLVM Compiler Infrastructure
4199990Srdivacky//
5199990Srdivacky// This file is distributed under the University of Illinois Open Source
6199990Srdivacky// License. See LICENSE.TXT for details.
7199990Srdivacky//
8199990Srdivacky//===----------------------------------------------------------------------===//
9199990Srdivacky
10199990Srdivacky#include "clang/Frontend/LangStandard.h"
11199990Srdivacky#include "llvm/ADT/StringSwitch.h"
12199990Srdivacky#include "llvm/Support/ErrorHandling.h"
13199990Srdivackyusing namespace clang;
14199990Srdivackyusing namespace clang::frontend;
15199990Srdivacky
16199990Srdivacky#define LANGSTANDARD(id, name, desc, features) \
17200583Srdivacky  static const LangStandard Lang_##id = { name, desc, features };
18199990Srdivacky#include "clang/Frontend/LangStandards.def"
19199990Srdivacky
20199990Srdivackyconst LangStandard &LangStandard::getLangStandardForKind(Kind K) {
21199990Srdivacky  switch (K) {
22199990Srdivacky  case lang_unspecified:
23207619Srdivacky    llvm::report_fatal_error("getLangStandardForKind() on unspecified kind");
24199990Srdivacky#define LANGSTANDARD(id, name, desc, features) \
25199990Srdivacky    case lang_##id: return Lang_##id;
26199990Srdivacky#include "clang/Frontend/LangStandards.def"
27199990Srdivacky  }
28235633Sdim  llvm_unreachable("Invalid language kind!");
29199990Srdivacky}
30199990Srdivacky
31226890Sdimconst LangStandard *LangStandard::getLangStandardForName(StringRef Name) {
32199990Srdivacky  Kind K = llvm::StringSwitch<Kind>(Name)
33199990Srdivacky#define LANGSTANDARD(id, name, desc, features) \
34199990Srdivacky    .Case(name, lang_##id)
35199990Srdivacky#include "clang/Frontend/LangStandards.def"
36199990Srdivacky    .Default(lang_unspecified);
37199990Srdivacky  if (K == lang_unspecified)
38199990Srdivacky    return 0;
39199990Srdivacky
40199990Srdivacky  return &getLangStandardForKind(K);
41199990Srdivacky}
42199990Srdivacky
43199990Srdivacky
44