mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-11 18:36:55 +00:00
Use getOperatorSpelling to get the spelling of an overloaded operator
rather than duplicating operator name tables in multiple places. llvm-svn: 363446
This commit is contained in:
parent
3f39123d15
commit
7fa2b74e98
@ -1640,14 +1640,8 @@ void DeclPrinter::VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D) {
|
||||
if (!D->isInvalidDecl()) {
|
||||
Out << "#pragma omp declare reduction (";
|
||||
if (D->getDeclName().getNameKind() == DeclarationName::CXXOperatorName) {
|
||||
static const char *const OperatorNames[NUM_OVERLOADED_OPERATORS] = {
|
||||
nullptr,
|
||||
#define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly) \
|
||||
Spelling,
|
||||
#include "clang/Basic/OperatorKinds.def"
|
||||
};
|
||||
const char *OpName =
|
||||
OperatorNames[D->getDeclName().getCXXOverloadedOperator()];
|
||||
getOperatorSpelling(D->getDeclName().getCXXOverloadedOperator());
|
||||
assert(OpName && "not an overloaded operator");
|
||||
Out << OpName;
|
||||
} else {
|
||||
|
@ -161,13 +161,7 @@ void DeclarationName::print(raw_ostream &OS, const PrintingPolicy &Policy) {
|
||||
return;
|
||||
|
||||
case DeclarationName::CXXOperatorName: {
|
||||
static const char *const OperatorNames[NUM_OVERLOADED_OPERATORS] = {
|
||||
nullptr,
|
||||
#define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly) \
|
||||
Spelling,
|
||||
#include "clang/Basic/OperatorKinds.def"
|
||||
};
|
||||
const char *OpName = OperatorNames[getCXXOverloadedOperator()];
|
||||
const char *OpName = getOperatorSpelling(getCXXOverloadedOperator());
|
||||
assert(OpName && "not an overloaded operator");
|
||||
|
||||
OS << "operator";
|
||||
|
@ -1622,21 +1622,14 @@ void StmtPrinter::VisitAtomicExpr(AtomicExpr *Node) {
|
||||
|
||||
// C++
|
||||
void StmtPrinter::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *Node) {
|
||||
const char *OpStrings[NUM_OVERLOADED_OPERATORS] = {
|
||||
"",
|
||||
#define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
|
||||
Spelling,
|
||||
#include "clang/Basic/OperatorKinds.def"
|
||||
};
|
||||
|
||||
OverloadedOperatorKind Kind = Node->getOperator();
|
||||
if (Kind == OO_PlusPlus || Kind == OO_MinusMinus) {
|
||||
if (Node->getNumArgs() == 1) {
|
||||
OS << OpStrings[Kind] << ' ';
|
||||
OS << getOperatorSpelling(Kind) << ' ';
|
||||
PrintExpr(Node->getArg(0));
|
||||
} else {
|
||||
PrintExpr(Node->getArg(0));
|
||||
OS << ' ' << OpStrings[Kind];
|
||||
OS << ' ' << getOperatorSpelling(Kind);
|
||||
}
|
||||
} else if (Kind == OO_Arrow) {
|
||||
PrintExpr(Node->getArg(0));
|
||||
@ -1656,11 +1649,11 @@ void StmtPrinter::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *Node) {
|
||||
PrintExpr(Node->getArg(1));
|
||||
OS << ']';
|
||||
} else if (Node->getNumArgs() == 1) {
|
||||
OS << OpStrings[Kind] << ' ';
|
||||
OS << getOperatorSpelling(Kind) << ' ';
|
||||
PrintExpr(Node->getArg(0));
|
||||
} else if (Node->getNumArgs() == 2) {
|
||||
PrintExpr(Node->getArg(0));
|
||||
OS << ' ' << OpStrings[Kind] << ' ';
|
||||
OS << ' ' << getOperatorSpelling(Kind) << ' ';
|
||||
PrintExpr(Node->getArg(1));
|
||||
} else {
|
||||
llvm_unreachable("unknown overloaded operator");
|
||||
|
@ -5532,9 +5532,10 @@ void Sema::CodeCompleteOperatorName(Scope *S) {
|
||||
&ResultBuilder::IsType);
|
||||
Results.EnterNewScope();
|
||||
|
||||
// Add the names of overloadable operators.
|
||||
// Add the names of overloadable operators. Note that OO_Conditional is not
|
||||
// actually overloadable.
|
||||
#define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly) \
|
||||
if (std::strcmp(Spelling, "?")) \
|
||||
if (OO_##Name != OO_Conditional) \
|
||||
Results.AddResult(Result(Spelling));
|
||||
#include "clang/Basic/OperatorKinds.def"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user