//===--- 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