| //===- OperationKinds.h - Operation enums -----------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file enumerates the different kinds of operations that can be |
| // performed by various expressions. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_AST_OPERATION_KINDS_H |
| #define LLVM_CLANG_AST_OPERATION_KINDS_H |
| |
| namespace clang { |
| |
| /// CastKind - the kind of cast this represents. |
| enum CastKind { |
| /// CK_Unknown - Unknown cast kind. |
| /// FIXME: The goal is to get rid of this and make all casts have a |
| /// kind so that the AST client doesn't have to try to figure out what's |
| /// going on. |
| CK_Unknown, |
| |
| /// CK_BitCast - Used for reinterpret_cast. |
| CK_BitCast, |
| |
| /// CK_LValueBitCast - Used for reinterpret_cast of expressions to |
| /// a reference type. |
| CK_LValueBitCast, |
| |
| /// CK_NoOp - Used for const_cast. |
| CK_NoOp, |
| |
| /// CK_BaseToDerived - Base to derived class casts. |
| CK_BaseToDerived, |
| |
| /// CK_DerivedToBase - Derived to base class casts. |
| CK_DerivedToBase, |
| |
| /// CK_UncheckedDerivedToBase - Derived to base class casts that |
| /// assume that the derived pointer is not null. |
| CK_UncheckedDerivedToBase, |
| |
| /// CK_Dynamic - Dynamic cast. |
| CK_Dynamic, |
| |
| /// CK_ToUnion - Cast to union (GCC extension). |
| CK_ToUnion, |
| |
| /// CK_ArrayToPointerDecay - Array to pointer decay. |
| CK_ArrayToPointerDecay, |
| |
| // CK_FunctionToPointerDecay - Function to pointer decay. |
| CK_FunctionToPointerDecay, |
| |
| /// CK_NullToMemberPointer - Null pointer to member pointer. |
| CK_NullToMemberPointer, |
| |
| /// CK_BaseToDerivedMemberPointer - Member pointer in base class to |
| /// member pointer in derived class. |
| CK_BaseToDerivedMemberPointer, |
| |
| /// CK_DerivedToBaseMemberPointer - Member pointer in derived class to |
| /// member pointer in base class. |
| CK_DerivedToBaseMemberPointer, |
| |
| /// CK_UserDefinedConversion - Conversion using a user defined type |
| /// conversion function. |
| CK_UserDefinedConversion, |
| |
| /// CK_ConstructorConversion - Conversion by constructor |
| CK_ConstructorConversion, |
| |
| /// CK_IntegralToPointer - Integral to pointer |
| CK_IntegralToPointer, |
| |
| /// CK_PointerToIntegral - Pointer to integral |
| CK_PointerToIntegral, |
| |
| /// CK_ToVoid - Cast to void. |
| CK_ToVoid, |
| |
| /// CK_VectorSplat - Casting from an integer/floating type to an extended |
| /// vector type with the same element type as the src type. Splats the |
| /// src expression into the destination expression. |
| CK_VectorSplat, |
| |
| /// CK_IntegralCast - Casting between integral types of different size. |
| CK_IntegralCast, |
| |
| /// CK_IntegralToFloating - Integral to floating point. |
| CK_IntegralToFloating, |
| |
| /// CK_FloatingToIntegral - Floating point to integral. |
| CK_FloatingToIntegral, |
| |
| /// CK_FloatingCast - Casting between floating types of different size. |
| CK_FloatingCast, |
| |
| /// CK_MemberPointerToBoolean - Member pointer to boolean |
| CK_MemberPointerToBoolean, |
| |
| /// CK_AnyPointerToObjCPointerCast - Casting any pointer to objective-c |
| /// pointer |
| CK_AnyPointerToObjCPointerCast, |
| |
| /// CK_AnyPointerToBlockPointerCast - Casting any pointer to block |
| /// pointer |
| CK_AnyPointerToBlockPointerCast, |
| |
| /// \brief Converting between two Objective-C object types, which |
| /// can occur when performing reference binding to an Objective-C |
| /// object. |
| CK_ObjCObjectLValueCast |
| }; |
| |
| |
| enum BinaryOperatorKind { |
| // Operators listed in order of precedence. |
| // Note that additions to this should also update the StmtVisitor class. |
| BO_PtrMemD, BO_PtrMemI, // [C++ 5.5] Pointer-to-member operators. |
| BO_Mul, BO_Div, BO_Rem, // [C99 6.5.5] Multiplicative operators. |
| BO_Add, BO_Sub, // [C99 6.5.6] Additive operators. |
| BO_Shl, BO_Shr, // [C99 6.5.7] Bitwise shift operators. |
| BO_LT, BO_GT, BO_LE, BO_GE, // [C99 6.5.8] Relational operators. |
| BO_EQ, BO_NE, // [C99 6.5.9] Equality operators. |
| BO_And, // [C99 6.5.10] Bitwise AND operator. |
| BO_Xor, // [C99 6.5.11] Bitwise XOR operator. |
| BO_Or, // [C99 6.5.12] Bitwise OR operator. |
| BO_LAnd, // [C99 6.5.13] Logical AND operator. |
| BO_LOr, // [C99 6.5.14] Logical OR operator. |
| BO_Assign, BO_MulAssign, // [C99 6.5.16] Assignment operators. |
| BO_DivAssign, BO_RemAssign, |
| BO_AddAssign, BO_SubAssign, |
| BO_ShlAssign, BO_ShrAssign, |
| BO_AndAssign, BO_XorAssign, |
| BO_OrAssign, |
| BO_Comma // [C99 6.5.17] Comma operator. |
| }; |
| |
| enum UnaryOperatorKind { |
| // Note that additions to this should also update the StmtVisitor class. |
| UO_PostInc, UO_PostDec, // [C99 6.5.2.4] Postfix increment and decrement |
| UO_PreInc, UO_PreDec, // [C99 6.5.3.1] Prefix increment and decrement |
| UO_AddrOf, UO_Deref, // [C99 6.5.3.2] Address and indirection |
| UO_Plus, UO_Minus, // [C99 6.5.3.3] Unary arithmetic |
| UO_Not, UO_LNot, // [C99 6.5.3.3] Unary arithmetic |
| UO_Real, UO_Imag, // "__real expr"/"__imag expr" Extension. |
| UO_Extension // __extension__ marker. |
| }; |
| |
| } |
| |
| #endif |