diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 51b8588d5f..692a0ea85f 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -481,6 +481,10 @@ public: /// isPostfix - Return true if this is a postfix operation, like x++. static bool isPostfix(Opcode Op); + /// isPostfix - Return true if this is a prefix operation, like --x. + static bool isPrefix(Opcode Op); + + bool isPrefix() const { return isPrefix(Opc); } bool isPostfix() const { return isPostfix(Opc); } bool isIncrementOp() const {return Opc==PreInc || Opc==PostInc; } bool isIncrementDecrementOp() const { return Opc>=PostInc && Opc<=PreDec; } diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index de0c740fd2..6c7d170d03 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -61,6 +61,16 @@ bool UnaryOperator::isPostfix(Opcode Op) { } } +bool UnaryOperator::isPrefix(Opcode Op) { + switch (Op) { + case PreInc: + case PreDec: + return true; + default: + return false; + } +} + /// getOpcodeStr - Turn an Opcode enum value into the punctuation char it /// corresponds to, e.g. "sizeof" or "[pre]++". const char *UnaryOperator::getOpcodeStr(Opcode Op) {