clang 19.0.0git
TypeTraits.cpp
Go to the documentation of this file.
1//===--- TypeTraits.cpp - Type Traits Support -----------------------------===//
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// This file implements the type traits support functions.
10//
11//===----------------------------------------------------------------------===//
12
14#include "llvm/Support/ErrorHandling.h"
15#include <cassert>
16using namespace clang;
17
18static constexpr const char *TypeTraitNames[] = {
19#define TYPE_TRAIT_1(Spelling, Name, Key) #Name,
20#include "clang/Basic/TokenKinds.def"
21#define TYPE_TRAIT_2(Spelling, Name, Key) #Name,
22#include "clang/Basic/TokenKinds.def"
23#define TYPE_TRAIT_N(Spelling, Name, Key) #Name,
24#include "clang/Basic/TokenKinds.def"
25};
26
27static constexpr const char *TypeTraitSpellings[] = {
28#define TYPE_TRAIT_1(Spelling, Name, Key) #Spelling,
29#include "clang/Basic/TokenKinds.def"
30#define TYPE_TRAIT_2(Spelling, Name, Key) #Spelling,
31#include "clang/Basic/TokenKinds.def"
32#define TYPE_TRAIT_N(Spelling, Name, Key) #Spelling,
33#include "clang/Basic/TokenKinds.def"
34};
35
36static constexpr const char *ArrayTypeTraitNames[] = {
37#define ARRAY_TYPE_TRAIT(Spelling, Name, Key) #Name,
38#include "clang/Basic/TokenKinds.def"
39};
40
41static constexpr const char *ArrayTypeTraitSpellings[] = {
42#define ARRAY_TYPE_TRAIT(Spelling, Name, Key) #Spelling,
43#include "clang/Basic/TokenKinds.def"
44};
45
46static constexpr const char *UnaryExprOrTypeTraitNames[] = {
47#define UNARY_EXPR_OR_TYPE_TRAIT(Spelling, Name, Key) #Name,
48#define CXX11_UNARY_EXPR_OR_TYPE_TRAIT(Spelling, Name, Key) #Name,
49#include "clang/Basic/TokenKinds.def"
50};
51
52static constexpr const char *UnaryExprOrTypeTraitSpellings[] = {
53#define UNARY_EXPR_OR_TYPE_TRAIT(Spelling, Name, Key) #Spelling,
54#define CXX11_UNARY_EXPR_OR_TYPE_TRAIT(Spelling, Name, Key) #Spelling,
55#include "clang/Basic/TokenKinds.def"
56};
57
58static constexpr const unsigned TypeTraitArities[] = {
59#define TYPE_TRAIT_1(Spelling, Name, Key) 1,
60#include "clang/Basic/TokenKinds.def"
61#define TYPE_TRAIT_2(Spelling, Name, Key) 2,
62#include "clang/Basic/TokenKinds.def"
63#define TYPE_TRAIT_N(Spelling, Name, Key) 0,
64#include "clang/Basic/TokenKinds.def"
65};
66
68 assert(T <= TT_Last && "invalid enum value!");
69 return TypeTraitNames[T];
70}
71
73 assert(T <= ATT_Last && "invalid enum value!");
74 return ArrayTypeTraitNames[T];
75}
76
78 assert(T <= UETT_Last && "invalid enum value!");
80}
81
83 assert(T <= TT_Last && "invalid enum value!");
84 return TypeTraitSpellings[T];
85}
86
88 assert(T <= ATT_Last && "invalid enum value!");
90}
91
93 assert(T <= UETT_Last && "invalid enum value!");
95}
96
98 assert(T <= TT_Last && "invalid enum value!");
99 return TypeTraitArities[T];
100}
static constexpr const char * UnaryExprOrTypeTraitSpellings[]
Definition: TypeTraits.cpp:52
static constexpr const char * TypeTraitNames[]
Definition: TypeTraits.cpp:18
static constexpr const char * ArrayTypeTraitNames[]
Definition: TypeTraits.cpp:36
static constexpr const char * ArrayTypeTraitSpellings[]
Definition: TypeTraits.cpp:41
static constexpr const unsigned TypeTraitArities[]
Definition: TypeTraits.cpp:58
static constexpr const char * TypeTraitSpellings[]
Definition: TypeTraits.cpp:27
static constexpr const char * UnaryExprOrTypeTraitNames[]
Definition: TypeTraits.cpp:46
Defines enumerations for the type traits support.
The JSON file list parser is used to communicate input to InstallAPI.
ArrayTypeTrait
Names for the array type traits.
Definition: TypeTraits.h:42
@ ATT_Last
Definition: TypeTraits.h:45
unsigned getTypeTraitArity(TypeTrait T) LLVM_READONLY
Return the arity of the type trait T.
Definition: TypeTraits.cpp:97
const char * getTraitName(ExpressionTrait T) LLVM_READONLY
Return the internal name of type trait T. Never null.
UnaryExprOrTypeTrait
Names for the "expression or type" traits.
Definition: TypeTraits.h:51
@ UETT_Last
Definition: TypeTraits.h:55
const char * getTraitSpelling(ExpressionTrait T) LLVM_READONLY
Return the spelling of the type trait TT. Never null.
TypeTrait
Names for traits that operate specifically on types.
Definition: TypeTraits.h:21
@ TT_Last
Definition: TypeTraits.h:36