* Add ability to get and set the output stream
authorMisha Brukman <brukman+llvm@gmail.com>
Wed, 28 Apr 2004 15:30:33 +0000 (15:30 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Wed, 28 Apr 2004 15:30:33 +0000 (15:30 +0000)
* New feature: outputting a Type* as symbolic, controlled via the stream
  similarly to sending std::hex to change number format

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

include/llvm/Assembly/CachedWriter.h

index a2167363599cce3c8f41131ad126255be484a26c..0808600d683ebd9e5479d6a9bf7a66c1550b5da4 100644 (file)
@@ -30,12 +30,20 @@ class AssemblyWriter;  // Internal private class
 class CachedWriter {
   AssemblyWriter *AW;
   SlotCalculator *SC;
+  bool SymbolicTypes;
 public:
-  std::ostream &Out;
+  std::ostream *Out;
+
+  enum TypeWriter {
+    SymTypeOn,
+    SymTypeOff
+  };
+
 public:
-  CachedWriter(std::ostream &O = std::cout) : AW(0), SC(0), Out(O) { }
+  CachedWriter(std::ostream &O = std::cout)
+    : AW(0), SC(0), SymbolicTypes(false), Out(&O) { }
   CachedWriter(const Module *M, std::ostream &O = std::cout)
-    : AW(0), SC(0), Out(O) {
+    : AW(0), SC(0), SymbolicTypes(false), Out(&O) {
     setModule(M);
   }
   ~CachedWriter();
@@ -66,22 +74,26 @@ public:
   inline CachedWriter &operator<<(const Constant *X) {
     return *this << (const Value*)X; 
   }
-  inline CachedWriter &operator<<(const Type *X) {
-    return *this << (const Value*)X;
-  }
-  inline CachedWriter &operator<<(const PointerType *X) {
-    return *this << (const Value*)X; 
-  }
+  CachedWriter &operator<<(const Type *X);
+  inline CachedWriter &operator<<(const PointerType *X);
 
   inline CachedWriter &operator<<(std::ostream &(&Manip)(std::ostream &)) {
-    Out << Manip; return *this;
+    *Out << Manip; return *this;
   }
 
   template<class X>
   inline CachedWriter &operator<<(const X &v) {
-    Out << v;
+    *Out << v;
     return *this;
   }
+
+  inline CachedWriter &operator<<(enum TypeWriter tw) {
+    SymbolicTypes = (tw == SymTypeOn);
+    return *this;
+  }
+
+  inline std::ostream& getStream() { return *Out; }
+  inline void setStream(std::ostream &os) { Out = &os; }
 };
 
 } // End llvm namespace