Cleanups for printing the terminators of CFGBlocks for "?", "||", and "&&" operators.

llvm-svn: 41654
This commit is contained in:
Ted Kremenek 2007-08-31 21:49:40 +00:00
parent 78502cf4c9
commit 7f7dd7602c
1 changed files with 28 additions and 2 deletions

View File

@ -960,7 +960,8 @@ public:
};
class CFGBlockTerminatorPrint : public StmtVisitor<CFGBlockTerminatorPrint,
void > {
void >
{
std::ostream& OS;
StmtPrinterHelper* Helper;
public:
@ -974,7 +975,7 @@ public:
}
// Default case.
void VisitStmt(Stmt* S) { S->printPretty(OS,Helper); }
void VisitStmt(Stmt* S) { S->printPretty(OS); }
void VisitForStmt(ForStmt* F) {
OS << "for (" ;
@ -1004,6 +1005,31 @@ public:
OS << '\n';
}
void VisitConditionalOperator(ConditionalOperator* C) {
C->getCond()->printPretty(OS,Helper);
OS << " ? ... : ...\n";
}
void VisitBinaryOperator(BinaryOperator* B) {
if (!B->isLogicalOp()) {
VisitExpr(B);
return;
}
B->getLHS()->printPretty(OS,Helper);
switch (B->getOpcode()) {
case BinaryOperator::LOr:
OS << " || ...\n";
return;
case BinaryOperator::LAnd:
OS << " && ...\n";
return;
default:
assert(false && "Invalid logical operator.");
}
}
void VisitExpr(Expr* E) {
E->printPretty(OS,Helper);
OS << '\n';