[cfe-commits] r58445 - in /cfe/trunk: include/clang/Analysis/PathSensitive/SVals.h lib/Analysis/SVals.cpp
Ted Kremenek
kremenek at apple.com
Thu Oct 30 11:35:11 PDT 2008
Author: kremenek
Date: Thu Oct 30 13:35:10 2008
New Revision: 58445
URL: http://llvm.org/viewvc/llvm-project?rev=58445&view=rev
Log:
Pretty-printing for SVals now mainly uses llvm::raw_ostream. We have an adapter for std::ostream, but this will be removed in the future.
Modified:
cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h
cfe/trunk/lib/Analysis/SVals.cpp
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h?rev=58445&r1=58444&r2=58445&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h Thu Oct 30 13:35:10 2008
@@ -163,7 +163,6 @@
NonLoc(unsigned SubKind, const void* d) : SVal(d, false, SubKind) {}
public:
- void print(std::ostream& Out) const;
void print(llvm::raw_ostream& Out) const;
// Utility methods to create NonLocs.
@@ -192,7 +191,6 @@
NonLoc NE(BasicValueFactory& BasicVals, const Loc& R) const;
public:
- void print(std::ostream& Out) const;
void print(llvm::raw_ostream& Out) const;
static Loc MakeVal(AddrLabelExpr* E);
Modified: cfe/trunk/lib/Analysis/SVals.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/SVals.cpp?rev=58445&r1=58444&r2=58445&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/SVals.cpp (original)
+++ cfe/trunk/lib/Analysis/SVals.cpp Thu Oct 30 13:35:10 2008
@@ -287,133 +287,13 @@
// Pretty-Printing.
//===----------------------------------------------------------------------===//
-void SVal::printStdErr() const { print(*llvm::cerr.stream()); }
+void SVal::printStdErr() const { print(llvm::errs()); }
void SVal::print(std::ostream& Out) const {
-
- switch (getBaseKind()) {
-
- case UnknownKind:
- Out << "Invalid"; break;
-
- case NonLocKind:
- cast<NonLoc>(this)->print(Out); break;
-
- case LocKind:
- cast<Loc>(this)->print(Out); break;
-
- case UndefinedKind:
- Out << "Undefined"; break;
-
- default:
- assert (false && "Invalid SVal.");
- }
+ llvm::raw_os_ostream out(Out);
+ print(out);
}
-static void printOpcode(std::ostream& Out, BinaryOperator::Opcode Op) {
-
- switch (Op) {
- case BinaryOperator::Mul: Out << '*' ; break;
- case BinaryOperator::Div: Out << '/' ; break;
- case BinaryOperator::Rem: Out << '%' ; break;
- case BinaryOperator::Add: Out << '+' ; break;
- case BinaryOperator::Sub: Out << '-' ; break;
- case BinaryOperator::Shl: Out << "<<" ; break;
- case BinaryOperator::Shr: Out << ">>" ; break;
- case BinaryOperator::LT: Out << "<" ; break;
- case BinaryOperator::GT: Out << '>' ; break;
- case BinaryOperator::LE: Out << "<=" ; break;
- case BinaryOperator::GE: Out << ">=" ; break;
- case BinaryOperator::EQ: Out << "==" ; break;
- case BinaryOperator::NE: Out << "!=" ; break;
- case BinaryOperator::And: Out << '&' ; break;
- case BinaryOperator::Xor: Out << '^' ; break;
- case BinaryOperator::Or: Out << '|' ; break;
-
- default: assert(false && "Not yet implemented.");
- }
-}
-
-void NonLoc::print(std::ostream& Out) const {
-
- switch (getSubKind()) {
-
- case nonloc::ConcreteIntKind:
- Out << cast<nonloc::ConcreteInt>(this)->getValue().getZExtValue();
-
- if (cast<nonloc::ConcreteInt>(this)->getValue().isUnsigned())
- Out << 'U';
-
- break;
-
- case nonloc::SymbolValKind:
- Out << '$' << cast<nonloc::SymbolVal>(this)->getSymbol();
- break;
-
- case nonloc::SymIntConstraintValKind: {
- const nonloc::SymIntConstraintVal& C =
- *cast<nonloc::SymIntConstraintVal>(this);
-
- Out << '$' << C.getConstraint().getSymbol() << ' ';
- printOpcode(Out, C.getConstraint().getOpcode());
- Out << ' ' << C.getConstraint().getInt().getZExtValue();
-
- if (C.getConstraint().getInt().isUnsigned())
- Out << 'U';
-
- break;
- }
-
- case nonloc::LocAsIntegerKind: {
- const nonloc::LocAsInteger& C = *cast<nonloc::LocAsInteger>(this);
- C.getLoc().print(Out);
- Out << " [as " << C.getNumBits() << " bit integer]";
- break;
- }
-
- default:
- assert (false && "Pretty-printed not implemented for this NonLoc.");
- break;
- }
-}
-
-void Loc::print(std::ostream& Out) const {
-
- switch (getSubKind()) {
-
- case loc::ConcreteIntKind:
- Out << cast<loc::ConcreteInt>(this)->getValue().getZExtValue()
- << " (Loc)";
- break;
-
- case loc::SymbolValKind:
- Out << '$' << cast<loc::SymbolVal>(this)->getSymbol();
- break;
-
- case loc::GotoLabelKind:
- Out << "&&"
- << cast<loc::GotoLabel>(this)->getLabel()->getID()->getName();
- break;
-
- case loc::MemRegionKind:
- Out << '&' << cast<loc::MemRegionVal>(this)->getRegion()->getString();
- break;
-
- case loc::FuncValKind:
- Out << "function "
- << cast<loc::FuncVal>(this)->getDecl()->getIdentifier()->getName();
- break;
-
- default:
- assert (false && "Pretty-printing not implemented for this Loc.");
- break;
- }
-}
-
-//===----------------------------------------------------------------------===//
-// Pretty-Printing with llvm::raw_ostream.
-//===----------------------------------------------------------------------===//
-
void SVal::print(llvm::raw_ostream& Out) const {
switch (getBaseKind()) {
@@ -498,9 +378,13 @@
case nonloc::CompoundValKind: {
const nonloc::CompoundVal& C = *cast<nonloc::CompoundVal>(this);
- Out << " { ";
- for (nonloc::CompoundVal::iterator I=C.begin(), E=C.end(); I!=E; ++I)
+ Out << " {";
+ bool first = true;
+ for (nonloc::CompoundVal::iterator I=C.begin(), E=C.end(); I!=E; ++I) {
+ if (first) { Out << ' '; first = false; }
+ else Out << ", ";
(*I).print(Out);
+ }
Out << " }";
break;
}
More information about the cfe-commits
mailing list