X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FAssembly%2FWriter.h;h=5e5fe1560585da65c631baf6e45ebfcc4c1dcdcb;hb=f2e19d5dcfa13472493bb18339555686182b7df9;hp=8e79b272b0841cfda4234815ea7a0b390c2b9d00;hpb=c287137ce7455c63be0075e0d5aba0bab4f125ea;p=oota-llvm.git diff --git a/include/llvm/Assembly/Writer.h b/include/llvm/Assembly/Writer.h index 8e79b272b08..5e5fe156058 100644 --- a/include/llvm/Assembly/Writer.h +++ b/include/llvm/Assembly/Writer.h @@ -18,6 +18,7 @@ #define LLVM_ASSEMBLY_WRITER_H #include +#include namespace llvm { @@ -25,6 +26,38 @@ class Type; class Module; class Value; class raw_ostream; +template class SmallVectorImpl; + +/// TypePrinting - Type printing machinery. +class TypePrinting { + void *TypeNames; // A map to remember type names. + TypePrinting(const TypePrinting &); // DO NOT IMPLEMENT + void operator=(const TypePrinting&); // DO NOT IMPLEMENT +public: + TypePrinting(); + ~TypePrinting(); + + void clear(); + + void print(const Type *Ty, raw_ostream &OS, bool IgnoreTopLevelName = false); + + void printAtLeastOneLevel(const Type *Ty, raw_ostream &OS) { + print(Ty, OS, true); + } + + /// hasTypeName - Return true if the type has a name in TypeNames, false + /// otherwise. + bool hasTypeName(const Type *Ty) const; + + /// addTypeName - Add a name for the specified type if it doesn't already have + /// one. This name will be printed instead of the structural version of the + /// type in order to make the output more concise. + void addTypeName(const Type *Ty, const std::string &N); + +private: + void CalcTypeName(const Type *Ty, SmallVectorImpl &TypeStack, + raw_ostream &OS, bool IgnoreTopLevelName = false); +}; // WriteTypeSymbolic - This attempts to write the specified type as a symbolic // type, if there is an entry in the Module's symbol table for the specified