]> granicus.if.org Git - clang/commitdiff
Pretty-printing for SVals now mainly uses llvm::raw_ostream. We have an adapter...
authorTed Kremenek <kremenek@apple.com>
Thu, 30 Oct 2008 18:35:10 +0000 (18:35 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 30 Oct 2008 18:35:10 +0000 (18:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58445 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/SVals.h
lib/Analysis/SVals.cpp

index 91fb71e6df3ff066c5c103fdd7877ce09da485e7..7a1a87e34b46bae3de6bdb42037eae9560d2a67b 100644 (file)
@@ -163,7 +163,6 @@ protected:
   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 @@ protected:
   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);
index bba0bde12ab7c6346e402a8ad13a1ce99f2bc8f1..428746da530f4582c39e2d1c113284eed8b30d0c 100644 (file)
@@ -287,133 +287,13 @@ Loc Loc::MakeVal(AddrLabelExpr* E) { return loc::GotoLabel(E->getLabel()); }
 // 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.");
-  }
-}
-
-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;
-  }
+  llvm::raw_os_ostream out(Out);
+  print(out);
 }
 
-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 @@ void NonLoc::print(llvm::raw_ostream& Out) const {
       
     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;
     }