mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 10:36:07 +00:00

...enumerations from TokenKinds.def and use the new macros from TokenKinds.def to remove the hard-coded lists of traits. All the information needed to generate these enumerations is already present in TokenKinds.def. The motivation here is to be able to dump the trait spelling without hard-coding the list in yet another place. Note that this change the order of the enumerators in the enumerations (except that in the TypeTrait enumeration all unary type traits are before all binary type traits, and all binary type traits are before all n-ary type traits). Apart from the aforementioned ordering which is relied upon, after this patch no code in clang or in the various clang tools depend on the specific ordering of the enumerators. No functional changes intended. Differential Revision: https://reviews.llvm.org/D81455 Reviewed By: aaron.ballman
37 lines
1.2 KiB
C++
37 lines
1.2 KiB
C++
//===--- ExpressionTraits.cpp - Expression Traits Support -----------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements the expression traits support functions.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "clang/Basic/ExpressionTraits.h"
|
|
#include "llvm/Support/ErrorHandling.h"
|
|
#include <cassert>
|
|
using namespace clang;
|
|
|
|
static constexpr const char *ExpressionTraitNames[] = {
|
|
#define EXPRESSION_TRAIT(Spelling, Name, Key) #Name,
|
|
#include "clang/Basic/TokenKinds.def"
|
|
};
|
|
|
|
static constexpr const char *ExpressionTraitSpellings[] = {
|
|
#define EXPRESSION_TRAIT(Spelling, Name, Key) #Spelling,
|
|
#include "clang/Basic/TokenKinds.def"
|
|
};
|
|
|
|
const char *clang::getTraitName(ExpressionTrait T) {
|
|
assert(T <= ET_Last && "invalid enum value!");
|
|
return ExpressionTraitNames[T];
|
|
}
|
|
|
|
const char *clang::getTraitSpelling(ExpressionTrait T) {
|
|
assert(T <= ET_Last && "invalid enum value!");
|
|
return ExpressionTraitSpellings[T];
|
|
}
|