Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- OperatorKinds.h - C++ Overloaded Operators -------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. ///
  9. /// \file
  10. /// Defines an enumeration for C++ overloaded operators.
  11. ///
  12. //===----------------------------------------------------------------------===//
  13.  
  14. #ifndef LLVM_CLANG_BASIC_OPERATORKINDS_H
  15. #define LLVM_CLANG_BASIC_OPERATORKINDS_H
  16.  
  17. namespace clang {
  18.  
  19. /// Enumeration specifying the different kinds of C++ overloaded
  20. /// operators.
  21. enum OverloadedOperatorKind : int {
  22.   OO_None,                ///< Not an overloaded operator
  23. #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \
  24.   OO_##Name,
  25. #include "clang/Basic/OperatorKinds.def"
  26.   NUM_OVERLOADED_OPERATORS
  27. };
  28.  
  29. /// Retrieve the spelling of the given overloaded operator, without
  30. /// the preceding "operator" keyword.
  31. const char *getOperatorSpelling(OverloadedOperatorKind Operator);
  32.  
  33. /// Get the other overloaded operator that the given operator can be rewritten
  34. /// into, if any such operator exists.
  35. inline OverloadedOperatorKind
  36. getRewrittenOverloadedOperator(OverloadedOperatorKind Kind) {
  37.   switch (Kind) {
  38.   case OO_Less:
  39.   case OO_LessEqual:
  40.   case OO_Greater:
  41.   case OO_GreaterEqual:
  42.     return OO_Spaceship;
  43.  
  44.   case OO_ExclaimEqual:
  45.     return OO_EqualEqual;
  46.  
  47.   default:
  48.     return OO_None;
  49.   }
  50. }
  51.  
  52. /// Determine if this is a compound assignment operator.
  53. inline bool isCompoundAssignmentOperator(OverloadedOperatorKind Kind) {
  54.   return Kind >= OO_PlusEqual && Kind <= OO_PipeEqual;
  55. }
  56.  
  57. } // end namespace clang
  58.  
  59. #endif
  60.