Add a new ChooseExpr::isConditionTrue method to unify

some code.

llvm-svn: 43322
This commit is contained in:
Chris Lattner 2007-10-25 00:29:32 +00:00
parent 00974dce68
commit 35e564ed09
5 changed files with 14 additions and 11 deletions

View File

@ -894,6 +894,14 @@ ObjCMessageExpr::ObjCMessageExpr(IdentifierInfo *clsName, Selector selInfo,
RBracloc = RBrac; RBracloc = RBrac;
} }
bool ChooseExpr::isConditionTrue(ASTContext &C) const {
llvm::APSInt CondVal(32);
bool IsConst = getCond()->isIntegerConstantExpr(CondVal, C);
assert(IsConst && "Condition of choose expr must be i-c-e"); IsConst=IsConst;
return CondVal != 0;
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Child Iterators for iterating over subexpressions/substatements // Child Iterators for iterating over subexpressions/substatements
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//

View File

@ -499,12 +499,8 @@ VisitConditionalOperator(const ConditionalOperator *E) {
} }
ComplexPairTy ComplexExprEmitter::VisitChooseExpr(ChooseExpr *E) { ComplexPairTy ComplexExprEmitter::VisitChooseExpr(ChooseExpr *E) {
llvm::APSInt CondVal(32);
bool IsConst = E->getCond()->isIntegerConstantExpr(CondVal, CGF.getContext());
assert(IsConst && "Condition of choose expr must be i-c-e"); IsConst=IsConst;
// Emit the LHS or RHS as appropriate. // Emit the LHS or RHS as appropriate.
return Visit(CondVal != 0 ? E->getLHS() : E->getRHS()); return Visit(E->isConditionTrue(CGF.getContext()) ? E->getLHS() :E->getRHS());
} }
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//

View File

@ -903,12 +903,8 @@ VisitConditionalOperator(const ConditionalOperator *E) {
} }
Value *ScalarExprEmitter::VisitChooseExpr(ChooseExpr *E) { Value *ScalarExprEmitter::VisitChooseExpr(ChooseExpr *E) {
llvm::APSInt CondVal(32);
bool IsConst = E->getCond()->isIntegerConstantExpr(CondVal, CGF.getContext());
assert(IsConst && "Condition of choose expr must be i-c-e"); IsConst=IsConst;
// Emit the LHS or RHS as appropriate. // Emit the LHS or RHS as appropriate.
return Visit(CondVal != 0 ? E->getLHS() : E->getRHS()); return Visit(E->isConditionTrue(CGF.getContext()) ? E->getLHS() : E->getRHS());
} }
Value *ScalarExprEmitter::VisitVAArgExpr(VAArgExpr *VE) Value *ScalarExprEmitter::VisitVAArgExpr(VAArgExpr *VE)

View File

@ -750,7 +750,6 @@
08FB7793FE84155DC02AAC07 /* Project object */ = { 08FB7793FE84155DC02AAC07 /* Project object */ = {
isa = PBXProject; isa = PBXProject;
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1; hasScannedForEncodings = 1;
mainGroup = 08FB7794FE84155DC02AAC07 /* clang */; mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
projectDirPath = ""; projectDirPath = "";

View File

@ -961,6 +961,10 @@ public:
SubExprs[RHS] = rhs; SubExprs[RHS] = rhs;
} }
/// isConditionTrue - Return true if the condition is true. This is always
/// statically knowable for a well-formed choosexpr.
bool isConditionTrue(ASTContext &C) const;
Expr *getCond() const { return SubExprs[COND]; } Expr *getCond() const { return SubExprs[COND]; }
Expr *getLHS() const { return SubExprs[LHS]; } Expr *getLHS() const { return SubExprs[LHS]; }
Expr *getRHS() const { return SubExprs[RHS]; } Expr *getRHS() const { return SubExprs[RHS]; }