aboutsummaryrefslogtreecommitdiff
path: root/lib/Checker/Environment.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-12-02 07:49:45 +0000
committerTed Kremenek <kremenek@apple.com>2010-12-02 07:49:45 +0000
commitc8413fd03f73084a5c93028f8b4db619fc388087 (patch)
tree0815a7cb0b9c477e280a91e4c89713488e43f7f2 /lib/Checker/Environment.cpp
parent0608f53744ccf88c4d21d6b500f6d23927533ac9 (diff)
Merge ValueManager into SValBuilder.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120696 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Checker/Environment.cpp')
-rw-r--r--lib/Checker/Environment.cpp35
1 files changed, 9 insertions, 26 deletions
diff --git a/lib/Checker/Environment.cpp b/lib/Checker/Environment.cpp
index 798f9ba9da..aac4afaafb 100644
--- a/lib/Checker/Environment.cpp
+++ b/lib/Checker/Environment.cpp
@@ -17,32 +17,25 @@
using namespace clang;
-SVal Environment::GetSVal(const Stmt *E, ValueManager& ValMgr) const {
-
+SVal Environment::getSVal(const Stmt *E, SValBuilder& svalBuilder) const {
for (;;) {
-
switch (E->getStmtClass()) {
-
case Stmt::AddrLabelExprClass:
- return ValMgr.makeLoc(cast<AddrLabelExpr>(E));
-
- // ParenExprs are no-ops.
-
+ return svalBuilder.makeLoc(cast<AddrLabelExpr>(E));
case Stmt::ParenExprClass:
+ // ParenExprs are no-ops.
E = cast<ParenExpr>(E)->getSubExpr();
continue;
-
case Stmt::CharacterLiteralClass: {
const CharacterLiteral* C = cast<CharacterLiteral>(E);
- return ValMgr.makeIntVal(C->getValue(), C->getType());
+ return svalBuilder.makeIntVal(C->getValue(), C->getType());
}
-
case Stmt::CXXBoolLiteralExprClass: {
const SVal *X = ExprBindings.lookup(E);
if (X)
return *X;
else
- return ValMgr.makeIntVal(cast<CXXBoolLiteralExpr>(E));
+ return svalBuilder.makeIntVal(cast<CXXBoolLiteralExpr>(E));
}
case Stmt::IntegerLiteralClass: {
// In C++, this expression may have been bound to a temporary object.
@@ -50,47 +43,37 @@ SVal Environment::GetSVal(const Stmt *E, ValueManager& ValMgr) const {
if (X)
return *X;
else
- return ValMgr.makeIntVal(cast<IntegerLiteral>(E));
+ return svalBuilder.makeIntVal(cast<IntegerLiteral>(E));
}
-
- // We blast through no-op casts to get the descendant
- // subexpression that has a value.
-
case Stmt::ImplicitCastExprClass:
case Stmt::CStyleCastExprClass: {
+ // We blast through no-op casts to get the descendant
+ // subexpression that has a value.
const CastExpr* C = cast<CastExpr>(E);
QualType CT = C->getType();
-
if (CT->isVoidType())
return UnknownVal();
-
if (C->getCastKind() == CK_NoOp) {
E = C->getSubExpr();
continue;
}
break;
}
-
case Stmt::CXXExprWithTemporariesClass:
E = cast<CXXExprWithTemporaries>(E)->getSubExpr();
continue;
-
case Stmt::CXXBindTemporaryExprClass:
E = cast<CXXBindTemporaryExpr>(E)->getSubExpr();
continue;
-
case Stmt::CXXFunctionalCastExprClass:
E = cast<CXXFunctionalCastExpr>(E)->getSubExpr();
- continue;
-
+ continue;
// Handle all other Stmt* using a lookup.
default:
break;
};
-
break;
}
-
return LookupExpr(E);
}