Create helper method in BodyFarm for creating simple assignments.

llvm-svn: 164400
This commit is contained in:
Ted Kremenek 2012-09-21 18:33:54 +00:00
parent dff3553e3c
commit f465dc1553
1 changed files with 12 additions and 4 deletions

View File

@ -46,6 +46,9 @@ class ASTMaker {
public:
ASTMaker(ASTContext &C) : C(C) {}
/// Create a new BinaryOperator representing a simple assignment.
BinaryOperator *makeAssignment(const Expr *LHS, const Expr *RHS, QualType Ty);
/// Create a new DeclRefExpr for the referenced variable.
DeclRefExpr *makeDeclRefExpr(const VarDecl *D);
@ -63,6 +66,13 @@ private:
};
}
BinaryOperator *ASTMaker::makeAssignment(const Expr *LHS, const Expr *RHS,
QualType Ty) {
return new (C) BinaryOperator(const_cast<Expr*>(LHS), const_cast<Expr*>(RHS),
BO_Assign, Ty, VK_RValue,
OK_Ordinary, SourceLocation());
}
DeclRefExpr *ASTMaker::makeDeclRefExpr(const VarDecl *D) {
DeclRefExpr *DR =
DeclRefExpr::Create(/* Ctx = */ C,
@ -145,10 +155,8 @@ static Stmt *create_dispatch_once(ASTContext &C, const FunctionDecl *D) {
DR = M.makeDeclRefExpr(Predicate);
ImplicitCastExpr *LValToRval = M.makeLvalueToRvalue(DR, PredicateQPtrTy);
UnaryOperator *UO = M.makeDereference(LValToRval, PredicateTy);
BinaryOperator *B = new (C) BinaryOperator(UO, ICE, BO_Assign,
PredicateTy, VK_RValue,
OK_Ordinary,
SourceLocation());
BinaryOperator * B = M.makeAssignment(UO, ICE, PredicateTy);
// (3) Create the compound statement.
Stmt *Stmts[2];
Stmts[0] = B;