xref: /llvm-project/clang/lib/Basic/ExpressionTraits.cpp (revision 78e636b3f2f0b0487130b31fade4f95ab179a18c)
1*78e636b3SBruno Ricci //===--- ExpressionTraits.cpp - Expression Traits Support -----------------===//
2*78e636b3SBruno Ricci //
3*78e636b3SBruno Ricci // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*78e636b3SBruno Ricci // See https://llvm.org/LICENSE.txt for license information.
5*78e636b3SBruno Ricci // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*78e636b3SBruno Ricci //
7*78e636b3SBruno Ricci //===----------------------------------------------------------------------===//
8*78e636b3SBruno Ricci //
9*78e636b3SBruno Ricci //  This file implements the expression traits support functions.
10*78e636b3SBruno Ricci //
11*78e636b3SBruno Ricci //===----------------------------------------------------------------------===//
12*78e636b3SBruno Ricci 
13*78e636b3SBruno Ricci #include "clang/Basic/ExpressionTraits.h"
14*78e636b3SBruno Ricci #include "llvm/Support/ErrorHandling.h"
15*78e636b3SBruno Ricci #include <cassert>
16*78e636b3SBruno Ricci using namespace clang;
17*78e636b3SBruno Ricci 
18*78e636b3SBruno Ricci static constexpr const char *ExpressionTraitNames[] = {
19*78e636b3SBruno Ricci #define EXPRESSION_TRAIT(Spelling, Name, Key) #Name,
20*78e636b3SBruno Ricci #include "clang/Basic/TokenKinds.def"
21*78e636b3SBruno Ricci };
22*78e636b3SBruno Ricci 
23*78e636b3SBruno Ricci static constexpr const char *ExpressionTraitSpellings[] = {
24*78e636b3SBruno Ricci #define EXPRESSION_TRAIT(Spelling, Name, Key) #Spelling,
25*78e636b3SBruno Ricci #include "clang/Basic/TokenKinds.def"
26*78e636b3SBruno Ricci };
27*78e636b3SBruno Ricci 
getTraitName(ExpressionTrait T)28*78e636b3SBruno Ricci const char *clang::getTraitName(ExpressionTrait T) {
29*78e636b3SBruno Ricci   assert(T <= ET_Last && "invalid enum value!");
30*78e636b3SBruno Ricci   return ExpressionTraitNames[T];
31*78e636b3SBruno Ricci }
32*78e636b3SBruno Ricci 
getTraitSpelling(ExpressionTrait T)33*78e636b3SBruno Ricci const char *clang::getTraitSpelling(ExpressionTrait T) {
34*78e636b3SBruno Ricci   assert(T <= ET_Last && "invalid enum value!");
35*78e636b3SBruno Ricci   return ExpressionTraitSpellings[T];
36*78e636b3SBruno Ricci }
37