diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-06-14 20:01:51 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-06-14 20:01:51 +0000 |
commit | 7fa2b74e988e8da6a1d0c27d4c6567f26aec03e6 (patch) | |
tree | 9032dde826e1c97f94f43e4a6c351de2736b1185 | |
parent | 3f39123d15ba5e145ce81c63ea7e03c72c3b4f8f (diff) | |
download | bcm5719-llvm-7fa2b74e988e8da6a1d0c27d4c6567f26aec03e6.tar.gz bcm5719-llvm-7fa2b74e988e8da6a1d0c27d4c6567f26aec03e6.zip |
Use getOperatorSpelling to get the spelling of an overloaded operator
rather than duplicating operator name tables in multiple places.
llvm-svn: 363446
-rw-r--r-- | clang/lib/AST/DeclPrinter.cpp | 8 | ||||
-rw-r--r-- | clang/lib/AST/DeclarationName.cpp | 8 | ||||
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 15 | ||||
-rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 5 |
4 files changed, 9 insertions, 27 deletions
diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp index 65532ec4967..73dcdc6854f 100644 --- a/clang/lib/AST/DeclPrinter.cpp +++ b/clang/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/clang/lib/AST/DeclarationName.cpp b/clang/lib/AST/DeclarationName.cpp index 273a1fec094..fe69c71aa3d 100644 --- a/clang/lib/AST/DeclarationName.cpp +++ b/clang/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/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index 563095f89b9..83c017fdc87 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/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/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index d2e7766f8f1..7770f345cd0 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/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" |