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 |