Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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