aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/VMCore/AsmWriter.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp
index b90a5b2857..d3ae9027a7 100644
--- a/lib/VMCore/AsmWriter.cpp
+++ b/lib/VMCore/AsmWriter.cpp
@@ -26,8 +26,9 @@
#include "llvm/iPHINode.h"
#include "llvm/iOther.h"
#include "llvm/Module.h"
-#include "llvm/Analysis/SlotCalculator.h"
#include "llvm/SymbolTable.h"
+#include "llvm/Analysis/SlotCalculator.h"
+#include "llvm/Assembly/Writer.h"
#include "llvm/Support/CFG.h"
#include "Support/StringExtras.h"
#include "Support/STLExtras.h"
@@ -474,6 +475,8 @@ public:
void writeOperand(const Value *Op, bool PrintType, bool PrintName = true);
+ const Module* getModule() { return TheModule; }
+
private :
void printModule(const Module *M);
void printSymbolTable(const SymbolTable &ST);
@@ -1019,7 +1022,7 @@ void CachedWriter::setModule(const Module *M) {
delete SC; delete AW;
if (M) {
SC = new SlotCalculator(M, false);
- AW = new AssemblyWriter(Out, *SC, M, 0);
+ AW = new AssemblyWriter(*Out, *SC, M, 0);
} else {
SC = 0; AW = 0;
}
@@ -1040,7 +1043,16 @@ CachedWriter &CachedWriter::operator<<(const Value *V) {
case Value::BasicBlockVal: AW->write(cast<BasicBlock>(V)); break;
case Value::FunctionVal: AW->write(cast<Function>(V)); break;
case Value::GlobalVariableVal: AW->write(cast<GlobalVariable>(V)); break;
- default: Out << "<unknown value type: " << V->getValueType() << ">"; break;
+ default: *Out << "<unknown value type: " << V->getValueType() << ">"; break;
}
return *this;
}
+
+CachedWriter& CachedWriter::operator<<(const Type *X) {
+ if (SymbolicTypes) {
+ const Module *M = AW->getModule();
+ if (M) WriteTypeSymbolic(*Out, X, M);
+ return *this;
+ } else
+ return *this << (const Value*)X;
+}