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