]> granicus.if.org Git - clang/commitdiff
Added iterators to nonloc::CompoundSVal.
authorTed Kremenek <kremenek@apple.com>
Thu, 30 Oct 2008 18:01:28 +0000 (18:01 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 30 Oct 2008 18:01:28 +0000 (18:01 +0000)
Added pretty-printing for nonloc::CompoundSVal.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58442 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 82ed8558be96658e1113e1eef92db8e2d54c9c2e..a8995b149fbb8e9c83122eddcb98df939c3cebfa 100644 (file)
@@ -33,6 +33,10 @@ public:
   CompoundValData(QualType t, llvm::ImmutableList<SVal> l) 
     : T(t), L(l) {}
 
+  typedef llvm::ImmutableList<SVal>::iterator iterator;
+  iterator begin() const { return L.begin(); }
+  iterator end() const { return L.end(); }  
+  
   static void Profile(llvm::FoldingSetNodeID& ID, QualType T,
                       llvm::ImmutableList<SVal> L);
 
index 8cc993e1a30a69ab8b9bd05f4c9c0d3a32ba9c3f..91fb71e6df3ff066c5c103fdd7877ce09da485e7 100644 (file)
@@ -324,9 +324,13 @@ class CompoundVal : public NonLoc {
   CompoundVal(const CompoundValData* D) : NonLoc(CompoundValKind, D) {}
 
 public:
-  const CompoundValData* getValue() {
+  const CompoundValData* getValue() const {
     return static_cast<CompoundValData*>(Data);
   }
+  
+  typedef llvm::ImmutableList<SVal>::iterator iterator;
+  iterator begin() const;
+  iterator end() const;  
 
   static bool classof(const SVal* V) {
     return V->getBaseKind() == NonLocKind && V->getSubKind() == CompoundValKind;
index 1fb5875693a54beb605d9b305067742d8ff688f3..bba0bde12ab7c6346e402a8ad13a1ce99f2bc8f1 100644 (file)
@@ -54,6 +54,18 @@ SVal::symbol_iterator SVal::symbol_end() const {
   return symbol_iterator();
 }
 
+//===----------------------------------------------------------------------===//
+// Other Iterators.
+//===----------------------------------------------------------------------===//
+
+nonloc::CompoundVal::iterator nonloc::CompoundVal::begin() const {
+  return getValue()->begin();
+}
+
+nonloc::CompoundVal::iterator nonloc::CompoundVal::end() const {
+  return getValue()->end();
+}
+
 //===----------------------------------------------------------------------===//
 // Useful predicates.
 //===----------------------------------------------------------------------===//
@@ -484,6 +496,15 @@ void NonLoc::print(llvm::raw_ostream& Out) const {
       break;
     }
       
+    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)
+        (*I).print(Out);
+      Out << " }";
+      break;
+    }
+      
     default:
       assert (false && "Pretty-printed not implemented for this NonLoc.");
       break;