[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