forked from OSchip/llvm-project
Add a new ChooseExpr::isConditionTrue method to unify
some code. llvm-svn: 43322
This commit is contained in:
parent
00974dce68
commit
35e564ed09
|
@ -894,6 +894,14 @@ ObjCMessageExpr::ObjCMessageExpr(IdentifierInfo *clsName, Selector selInfo,
|
|||
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
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -499,12 +499,8 @@ VisitConditionalOperator(const ConditionalOperator *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.
|
||||
return Visit(CondVal != 0 ? E->getLHS() : E->getRHS());
|
||||
return Visit(E->isConditionTrue(CGF.getContext()) ? E->getLHS() :E->getRHS());
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -903,12 +903,8 @@ VisitConditionalOperator(const ConditionalOperator *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.
|
||||
return Visit(CondVal != 0 ? E->getLHS() : E->getRHS());
|
||||
return Visit(E->isConditionTrue(CGF.getContext()) ? E->getLHS() : E->getRHS());
|
||||
}
|
||||
|
||||
Value *ScalarExprEmitter::VisitVAArgExpr(VAArgExpr *VE)
|
||||
|
|
|
@ -750,7 +750,6 @@
|
|||
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
|
||||
compatibilityVersion = "Xcode 2.4";
|
||||
hasScannedForEncodings = 1;
|
||||
mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
|
||||
projectDirPath = "";
|
||||
|
|
|
@ -961,6 +961,10 @@ public:
|
|||
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 *getLHS() const { return SubExprs[LHS]; }
|
||||
Expr *getRHS() const { return SubExprs[RHS]; }
|
||||
|
|
Loading…
Reference in New Issue