aboutsummaryrefslogtreecommitdiff
path: root/Analysis/GRConstants.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Analysis/GRConstants.cpp')
-rw-r--r--Analysis/GRConstants.cpp56
1 files changed, 35 insertions, 21 deletions
diff --git a/Analysis/GRConstants.cpp b/Analysis/GRConstants.cpp
index cc8f75cf6f..eba0619b24 100644
--- a/Analysis/GRConstants.cpp
+++ b/Analysis/GRConstants.cpp
@@ -351,7 +351,7 @@ void GRConstants::ProcessBranch(Expr* Condition, Stmt* Term,
StateTy PrevState = builder.getState();
// Remove old bindings for subexpressions.
- for (StateTy::vb_iterator I=PrevState.begin(), E=PrevState.end(); I!=E; ++I)
+ for (StateTy::eb_iterator I=PrevState.eb_begin(), E=PrevState.eb_end(); I!=E; ++I)
if (I.getKey().isSubExpr())
PrevState = StateMgr.Remove(PrevState, I.getKey());
@@ -1123,38 +1123,52 @@ struct VISIBILITY_HIDDEN DOTGraphTraits<GRConstants::NodeTy*> :
static void PrintKindLabel(std::ostream& Out, ExprBindKey::Kind kind) {
switch (kind) {
case ExprBindKey::IsSubExpr: Out << "Sub-Expressions:\\l"; break;
- case ExprBindKey::IsDecl: Out << "Variables:\\l"; break;
case ExprBindKey::IsBlkExpr: Out << "Block-level Expressions:\\l"; break;
default: assert (false && "Unknown ExprBindKey type.");
}
}
- static void PrintKind(std::ostream& Out, GRConstants::StateTy M,
- ExprBindKey::Kind kind, bool isFirstGroup = false) {
+
+ static void PrintVarBindings(std::ostream& Out, GRConstants::StateTy St) {
+
+ Out << "Variables:\\l";
+
bool isFirst = true;
- for (GRConstants::StateTy::vb_iterator I=M.begin(), E=M.end();I!=E;++I) {
+ for (GRConstants::StateTy::vb_iterator I=St.vb_begin(),
+ E=St.vb_end(); I!=E;++I) {
+
+ if (isFirst)
+ isFirst = false;
+ else
+ Out << "\\l";
+
+ Out << ' ' << I.getKey()->getName() << " : ";
+ I.getData().print(Out);
+ }
+
+ }
+
+ static void PrintExprBindings(std::ostream& Out, GRConstants::StateTy St,
+ ExprBindKey::Kind kind) {
+ bool isFirst = true;
+
+ for (GRConstants::StateTy::eb_iterator I=St.eb_begin(),
+ E=St.eb_end(); I!=E;++I) {
+
if (I.getKey().getKind() != kind)
continue;
if (isFirst) {
- if (!isFirstGroup) Out << "\\l\\l";
+ Out << "\\l\\l";
PrintKindLabel(Out, kind);
isFirst = false;
}
else
Out << "\\l";
-
- Out << ' ';
-
- if (ValueDecl* V = dyn_cast<ValueDecl>(I.getKey()))
- Out << V->getName();
- else {
- Stmt* E = cast<Stmt>(I.getKey());
- Out << " (" << (void*) E << ") ";
- E->printPretty(Out);
- }
-
+
+ Out << " (" << (void*) I.getKey().getExpr() << ") ";
+ I.getKey().getExpr()->printPretty(Out);
Out << " : ";
I.getData().print(Out);
}
@@ -1260,10 +1274,10 @@ struct VISIBILITY_HIDDEN DOTGraphTraits<GRConstants::NodeTy*> :
}
Out << "\\|StateID: " << (void*) N->getState().getImpl() << "\\|";
-
- PrintKind(Out, N->getState(), ExprBindKey::IsDecl, true);
- PrintKind(Out, N->getState(), ExprBindKey::IsBlkExpr);
- PrintKind(Out, N->getState(), ExprBindKey::IsSubExpr);
+
+ PrintVarBindings(Out, N->getState());
+ PrintExprBindings(Out, N->getState(), ExprBindKey::IsBlkExpr);
+ PrintExprBindings(Out, N->getState(), ExprBindKey::IsSubExpr);
PrintEQ(Out, N->getState());
PrintNE(Out, N->getState());