From: Richard Smith Date: Fri, 14 Jun 2019 20:01:51 +0000 (+0000) Subject: Use getOperatorSpelling to get the spelling of an overloaded operator X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b444e6042265d9b7c8f63d0ad92695ee11e7a6b0;p=clang Use getOperatorSpelling to get the spelling of an overloaded operator rather than duplicating operator name tables in multiple places. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@363446 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index 65532ec496..73dcdc6854 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -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 { diff --git a/lib/AST/DeclarationName.cpp b/lib/AST/DeclarationName.cpp index 273a1fec09..fe69c71aa3 100644 --- a/lib/AST/DeclarationName.cpp +++ b/lib/AST/DeclarationName.cpp @@ -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"; diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 563095f89b..83c017fdc8 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -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"); diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp index d2e7766f8f..7770f345cd 100644 --- a/lib/Sema/SemaCodeComplete.cpp +++ b/lib/Sema/SemaCodeComplete.cpp @@ -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"