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