- //===--- OperatorKinds.h - C++ Overloaded Operators -------------*- C++ -*-===// 
- // 
- // 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 
- // 
- //===----------------------------------------------------------------------===// 
- /// 
- /// \file 
- /// Defines an enumeration for C++ overloaded operators. 
- /// 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_CLANG_BASIC_OPERATORKINDS_H 
- #define LLVM_CLANG_BASIC_OPERATORKINDS_H 
-   
- namespace clang { 
-   
- /// Enumeration specifying the different kinds of C++ overloaded 
- /// operators. 
- enum OverloadedOperatorKind : int { 
-   OO_None,                ///< Not an overloaded operator 
- #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \ 
-   OO_##Name, 
- #include "clang/Basic/OperatorKinds.def" 
-   NUM_OVERLOADED_OPERATORS 
- }; 
-   
- /// Retrieve the spelling of the given overloaded operator, without 
- /// the preceding "operator" keyword. 
- const char *getOperatorSpelling(OverloadedOperatorKind Operator); 
-   
- /// Get the other overloaded operator that the given operator can be rewritten 
- /// into, if any such operator exists. 
- inline OverloadedOperatorKind 
- getRewrittenOverloadedOperator(OverloadedOperatorKind Kind) { 
-   switch (Kind) { 
-   case OO_Less: 
-   case OO_LessEqual: 
-   case OO_Greater: 
-   case OO_GreaterEqual: 
-     return OO_Spaceship; 
-   
-   case OO_ExclaimEqual: 
-     return OO_EqualEqual; 
-   
-   default: 
-     return OO_None; 
-   } 
- } 
-   
- /// Determine if this is a compound assignment operator. 
- inline bool isCompoundAssignmentOperator(OverloadedOperatorKind Kind) { 
-   return Kind >= OO_PlusEqual && Kind <= OO_PipeEqual; 
- } 
-   
- } // end namespace clang 
-   
- #endif 
-