clang
20.0.0git
lib
Basic
LangStandards.cpp
Go to the documentation of this file.
1
//===--- LangStandards.cpp - Language Standard Definitions ----------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "
clang/Basic/LangStandard.h
"
10
#include "clang/Config/config.h"
11
#include "llvm/ADT/StringSwitch.h"
12
#include "llvm/Support/ErrorHandling.h"
13
#include "llvm/TargetParser/Triple.h"
14
using namespace
clang
;
15
16
StringRef
clang::languageToString
(
Language
L) {
17
switch
(L) {
18
case
Language::Unknown:
19
return
"Unknown"
;
20
case
Language::Asm:
21
return
"Asm"
;
22
case
Language::LLVM_IR:
23
return
"LLVM IR"
;
24
case
Language::CIR:
25
return
"ClangIR"
;
26
case
Language::C:
27
return
"C"
;
28
case
Language::CXX:
29
return
"C++"
;
30
case
Language::ObjC:
31
return
"Objective-C"
;
32
case
Language::ObjCXX:
33
return
"Objective-C++"
;
34
case
Language::OpenCL:
35
return
"OpenCL"
;
36
case
Language::OpenCLCXX:
37
return
"OpenCLC++"
;
38
case
Language::CUDA:
39
return
"CUDA"
;
40
case
Language::HIP:
41
return
"HIP"
;
42
case
Language::HLSL:
43
return
"HLSL"
;
44
}
45
46
llvm_unreachable(
"unhandled language kind"
);
47
}
48
49
#define LANGSTANDARD(id, name, lang, desc, features) \
50
static const LangStandard Lang_##id = {name, desc, features, Language::lang};
51
#include "clang/Basic/LangStandards.def"
52
53
const
LangStandard
&
LangStandard::getLangStandardForKind
(
Kind
K) {
54
switch
(K) {
55
case
lang_unspecified
:
56
llvm::report_fatal_error(
"getLangStandardForKind() on unspecified kind"
);
57
#define LANGSTANDARD(id, name, lang, desc, features) \
58
case lang_##id: return Lang_##id;
59
#include "clang/Basic/LangStandards.def"
60
}
61
llvm_unreachable(
"Invalid language kind!"
);
62
}
63
64
LangStandard::Kind
LangStandard::getLangKind
(StringRef Name) {
65
return
llvm::StringSwitch<Kind>(Name)
66
#define LANGSTANDARD(id, name, lang, desc, features) .Case(name, lang_##id)
67
#define LANGSTANDARD_ALIAS(id, alias) .Case(alias, lang_##id)
68
#include "clang/Basic/LangStandards.def"
69
.Default(
lang_unspecified
);
70
}
71