From: Zhongxing Xu Date: Tue, 20 Apr 2010 05:40:40 +0000 (+0000) Subject: Replace code with a method call. No functionality change. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=107ccd1f56836ae57c1a5a9c13c881b0293d1e98;p=clang Replace code with a method call. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101876 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Checker/GRCXXExprEngine.cpp b/lib/Checker/GRCXXExprEngine.cpp index 67c478b86f..378f150b71 100644 --- a/lib/Checker/GRCXXExprEngine.cpp +++ b/lib/Checker/GRCXXExprEngine.cpp @@ -92,44 +92,11 @@ void GRExprEngine::VisitCXXConstructExpr(const CXXConstructExpr *E, SVal Dest, // Evaluate other arguments. - CXXConstructExpr::arg_iterator AB - = const_cast(E)->arg_begin(); - CXXConstructExpr::arg_iterator AE - = const_cast(E)->arg_end(); - llvm::SmallVector WorkList; - WorkList.reserve(AE - AB); - WorkList.push_back(CallExprWLItem(AB, Pred)); ExplodedNodeSet ArgsEvaluated; - const FunctionProtoType *Proto = CD->getType()->getAs(); - - while (!WorkList.empty()) { - CallExprWLItem Item = WorkList.back(); - WorkList.pop_back(); - - if (Item.I == AE) { - ArgsEvaluated.insert(Item.N); - continue; - } - - // Evaluate the argument. - ExplodedNodeSet Tmp; - const unsigned ParamIdx = Item.I - AB; - - bool VisitAsLvalue = false; - - if (ParamIdx < Proto->getNumArgs()) - VisitAsLvalue = Proto->getArgType(ParamIdx)->isReferenceType(); - - if (VisitAsLvalue) - VisitLValue(*Item.I, Item.N, Tmp); - else - Visit(*Item.I, Item.N, Tmp); - - ++(Item.I); - - for (ExplodedNodeSet::iterator NI=Tmp.begin(), NE=Tmp.end(); NI!=NE; ++NI) - WorkList.push_back(CallExprWLItem(Item.I, *NI)); - } + const FunctionProtoType *FnType = CD->getType()->getAs(); + EvalArguments(const_cast(E)->arg_begin(), + const_cast(E)->arg_end(), + FnType, Pred, ArgsEvaluated); // The callee stack frame context used to create the 'this' parameter region. const StackFrameContext *SFC = AMgr.getStackFrame(CD, Pred->getLocationContext(), @@ -158,35 +125,11 @@ void GRExprEngine::VisitCXXMemberCallExpr(const CXXMemberCallExpr *MCE, assert(FnType && "Method type not available"); // Evaluate explicit arguments with a worklist. - CallExpr::arg_iterator AB = const_cast(MCE)->arg_begin(), - AE = const_cast(MCE)->arg_end(); - llvm::SmallVector WorkList; - WorkList.reserve(AE - AB); - WorkList.push_back(CallExprWLItem(AB, Pred)); ExplodedNodeSet ArgsEvaluated; - - while (!WorkList.empty()) { - CallExprWLItem Item = WorkList.back(); - WorkList.pop_back(); - - if (Item.I == AE) { - ArgsEvaluated.insert(Item.N); - continue; - } - - ExplodedNodeSet Tmp; - const unsigned ParamIdx = Item.I - AB; - bool VisitAsLvalue = FnType->getArgType(ParamIdx)->isReferenceType(); - - if (VisitAsLvalue) - VisitLValue(*Item.I, Item.N, Tmp); - else - Visit(*Item.I, Item.N, Tmp); - - ++(Item.I); - for (ExplodedNodeSet::iterator NI=Tmp.begin(), NE=Tmp.end(); NI != NE; ++NI) - WorkList.push_back(CallExprWLItem(Item.I, *NI)); - } + EvalArguments(const_cast(MCE)->arg_begin(), + const_cast(MCE)->arg_end(), + FnType, Pred, ArgsEvaluated); + // Evaluate the implicit object argument. ExplodedNodeSet AllArgsEvaluated; const MemberExpr *ME = dyn_cast(MCE->getCallee()->IgnoreParens());