forked from OSchip/llvm-project
parent
dfffabd0e9
commit
1bcddcaab3
|
@ -1055,22 +1055,22 @@ public:
|
||||||
static const Opcode Extension = UO_Extension;
|
static const Opcode Extension = UO_Extension;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Stmt *Val;
|
unsigned Opc : 5;
|
||||||
Opcode Opc;
|
|
||||||
SourceLocation Loc;
|
SourceLocation Loc;
|
||||||
|
Stmt *Val;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
UnaryOperator(Expr *input, Opcode opc, QualType type, SourceLocation l)
|
UnaryOperator(Expr *input, Opcode opc, QualType type, SourceLocation l)
|
||||||
: Expr(UnaryOperatorClass, type,
|
: Expr(UnaryOperatorClass, type,
|
||||||
input->isTypeDependent() || type->isDependentType(),
|
input->isTypeDependent() || type->isDependentType(),
|
||||||
input->isValueDependent()),
|
input->isValueDependent()),
|
||||||
Val(input), Opc(opc), Loc(l) {}
|
Opc(opc), Loc(l), Val(input) {}
|
||||||
|
|
||||||
/// \brief Build an empty unary operator.
|
/// \brief Build an empty unary operator.
|
||||||
explicit UnaryOperator(EmptyShell Empty)
|
explicit UnaryOperator(EmptyShell Empty)
|
||||||
: Expr(UnaryOperatorClass, Empty), Opc(AddrOf) { }
|
: Expr(UnaryOperatorClass, Empty), Opc(AddrOf) { }
|
||||||
|
|
||||||
Opcode getOpcode() const { return Opc; }
|
Opcode getOpcode() const { return static_cast<Opcode>(Opc); }
|
||||||
void setOpcode(Opcode O) { Opc = O; }
|
void setOpcode(Opcode O) { Opc = O; }
|
||||||
|
|
||||||
Expr *getSubExpr() const { return cast<Expr>(Val); }
|
Expr *getSubExpr() const { return cast<Expr>(Val); }
|
||||||
|
@ -1090,12 +1090,12 @@ public:
|
||||||
return Op == PreInc || Op == PreDec;
|
return Op == PreInc || Op == PreDec;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isPrefix() const { return isPrefix(Opc); }
|
bool isPrefix() const { return isPrefix(getOpcode()); }
|
||||||
bool isPostfix() const { return isPostfix(Opc); }
|
bool isPostfix() const { return isPostfix(getOpcode()); }
|
||||||
bool isIncrementOp() const {return Opc==PreInc || Opc==PostInc; }
|
bool isIncrementOp() const { return Opc == PreInc || getOpcode() == PostInc; }
|
||||||
bool isIncrementDecrementOp() const { return Opc>=PostInc && Opc<=PreDec; }
|
bool isIncrementDecrementOp() const { return Opc >= PostInc && Opc<=PreDec; }
|
||||||
static bool isArithmeticOp(Opcode Op) { return Op >= Plus && Op <= LNot; }
|
static bool isArithmeticOp(Opcode Op) { return Op >= Plus && Op <= LNot; }
|
||||||
bool isArithmeticOp() const { return isArithmeticOp(Opc); }
|
bool isArithmeticOp() const { return isArithmeticOp(getOpcode()); }
|
||||||
|
|
||||||
/// getOpcodeStr - Turn an Opcode enum value into the punctuation char it
|
/// getOpcodeStr - Turn an Opcode enum value into the punctuation char it
|
||||||
/// corresponds to, e.g. "sizeof" or "[pre]++"
|
/// corresponds to, e.g. "sizeof" or "[pre]++"
|
||||||
|
@ -2323,10 +2323,11 @@ public:
|
||||||
static const Opcode Comma = BO_Comma;
|
static const Opcode Comma = BO_Comma;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
unsigned Opc : 6;
|
||||||
|
SourceLocation OpLoc;
|
||||||
|
|
||||||
enum { LHS, RHS, END_EXPR };
|
enum { LHS, RHS, END_EXPR };
|
||||||
Stmt* SubExprs[END_EXPR];
|
Stmt* SubExprs[END_EXPR];
|
||||||
Opcode Opc;
|
|
||||||
SourceLocation OpLoc;
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BinaryOperator(Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy,
|
BinaryOperator(Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy,
|
||||||
|
@ -2348,7 +2349,7 @@ public:
|
||||||
SourceLocation getOperatorLoc() const { return OpLoc; }
|
SourceLocation getOperatorLoc() const { return OpLoc; }
|
||||||
void setOperatorLoc(SourceLocation L) { OpLoc = L; }
|
void setOperatorLoc(SourceLocation L) { OpLoc = L; }
|
||||||
|
|
||||||
Opcode getOpcode() const { return Opc; }
|
Opcode getOpcode() const { return static_cast<Opcode>(Opc); }
|
||||||
void setOpcode(Opcode O) { Opc = O; }
|
void setOpcode(Opcode O) { Opc = O; }
|
||||||
|
|
||||||
Expr *getLHS() const { return cast<Expr>(SubExprs[LHS]); }
|
Expr *getLHS() const { return cast<Expr>(SubExprs[LHS]); }
|
||||||
|
@ -2364,7 +2365,7 @@ public:
|
||||||
/// corresponds to, e.g. "<<=".
|
/// corresponds to, e.g. "<<=".
|
||||||
static const char *getOpcodeStr(Opcode Op);
|
static const char *getOpcodeStr(Opcode Op);
|
||||||
|
|
||||||
const char *getOpcodeStr() const { return getOpcodeStr(Opc); }
|
const char *getOpcodeStr() const { return getOpcodeStr(getOpcode()); }
|
||||||
|
|
||||||
/// \brief Retrieve the binary opcode that corresponds to the given
|
/// \brief Retrieve the binary opcode that corresponds to the given
|
||||||
/// overloaded operator.
|
/// overloaded operator.
|
||||||
|
@ -2377,24 +2378,24 @@ public:
|
||||||
/// predicates to categorize the respective opcodes.
|
/// predicates to categorize the respective opcodes.
|
||||||
bool isMultiplicativeOp() const { return Opc >= Mul && Opc <= Rem; }
|
bool isMultiplicativeOp() const { return Opc >= Mul && Opc <= Rem; }
|
||||||
static bool isAdditiveOp(Opcode Opc) { return Opc == Add || Opc == Sub; }
|
static bool isAdditiveOp(Opcode Opc) { return Opc == Add || Opc == Sub; }
|
||||||
bool isAdditiveOp() const { return isAdditiveOp(Opc); }
|
bool isAdditiveOp() const { return isAdditiveOp(getOpcode()); }
|
||||||
static bool isShiftOp(Opcode Opc) { return Opc == Shl || Opc == Shr; }
|
static bool isShiftOp(Opcode Opc) { return Opc == Shl || Opc == Shr; }
|
||||||
bool isShiftOp() const { return isShiftOp(Opc); }
|
bool isShiftOp() const { return isShiftOp(getOpcode()); }
|
||||||
|
|
||||||
static bool isBitwiseOp(Opcode Opc) { return Opc >= And && Opc <= Or; }
|
static bool isBitwiseOp(Opcode Opc) { return Opc >= And && Opc <= Or; }
|
||||||
bool isBitwiseOp() const { return isBitwiseOp(Opc); }
|
bool isBitwiseOp() const { return isBitwiseOp(getOpcode()); }
|
||||||
|
|
||||||
static bool isRelationalOp(Opcode Opc) { return Opc >= LT && Opc <= GE; }
|
static bool isRelationalOp(Opcode Opc) { return Opc >= LT && Opc <= GE; }
|
||||||
bool isRelationalOp() const { return isRelationalOp(Opc); }
|
bool isRelationalOp() const { return isRelationalOp(getOpcode()); }
|
||||||
|
|
||||||
static bool isEqualityOp(Opcode Opc) { return Opc == EQ || Opc == NE; }
|
static bool isEqualityOp(Opcode Opc) { return Opc == EQ || Opc == NE; }
|
||||||
bool isEqualityOp() const { return isEqualityOp(Opc); }
|
bool isEqualityOp() const { return isEqualityOp(getOpcode()); }
|
||||||
|
|
||||||
static bool isComparisonOp(Opcode Opc) { return Opc >= LT && Opc <= NE; }
|
static bool isComparisonOp(Opcode Opc) { return Opc >= LT && Opc <= NE; }
|
||||||
bool isComparisonOp() const { return isComparisonOp(Opc); }
|
bool isComparisonOp() const { return isComparisonOp(getOpcode()); }
|
||||||
|
|
||||||
static bool isLogicalOp(Opcode Opc) { return Opc == LAnd || Opc == LOr; }
|
static bool isLogicalOp(Opcode Opc) { return Opc == LAnd || Opc == LOr; }
|
||||||
bool isLogicalOp() const { return isLogicalOp(Opc); }
|
bool isLogicalOp() const { return isLogicalOp(getOpcode()); }
|
||||||
|
|
||||||
bool isAssignmentOp() const { return Opc >= Assign && Opc <= OrAssign; }
|
bool isAssignmentOp() const { return Opc >= Assign && Opc <= OrAssign; }
|
||||||
bool isCompoundAssignmentOp() const { return Opc > Assign && Opc <= OrAssign;}
|
bool isCompoundAssignmentOp() const { return Opc > Assign && Opc <= OrAssign;}
|
||||||
|
|
Loading…
Reference in New Issue