diff options
author | Chris Lattner <sabre@nondot.org> | 2011-06-18 21:23:04 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-06-18 21:23:04 +0000 |
commit | fb78b33018bdd84d1879ae8a15f53d6b474982e9 (patch) | |
tree | deef26ae02697259868f200ad0c06f0b7c2ebffd | |
parent | 0cd0d881604775f3f97048645f040b2ef4f61e4b (diff) | |
download | external_llvm-fb78b33018bdd84d1879ae8a15f53d6b474982e9.zip external_llvm-fb78b33018bdd84d1879ae8a15f53d6b474982e9.tar.gz external_llvm-fb78b33018bdd84d1879ae8a15f53d6b474982e9.tar.bz2 |
now that Type::getDescription() is dead, the TypePrinting class can move from Assembly/Writer.h to being
a private class in AsmWriter.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133361 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Assembly/Writer.h | 34 | ||||
-rw-r--r-- | include/llvm/Type.h | 1 | ||||
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 70 |
3 files changed, 42 insertions, 63 deletions
diff --git a/include/llvm/Assembly/Writer.h b/include/llvm/Assembly/Writer.h index c5b2390..78c27f0 100644 --- a/include/llvm/Assembly/Writer.h +++ b/include/llvm/Assembly/Writer.h @@ -17,46 +17,12 @@ #ifndef LLVM_ASSEMBLY_WRITER_H #define LLVM_ASSEMBLY_WRITER_H -#include <string> - namespace llvm { class Type; class Module; class Value; class raw_ostream; -template <typename T> 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<const Type *> &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 diff --git a/include/llvm/Type.h b/include/llvm/Type.h index 95b2f92..6110154 100644 --- a/include/llvm/Type.h +++ b/include/llvm/Type.h @@ -17,7 +17,6 @@ #include "llvm/AbstractTypeUser.h" #include "llvm/Support/Casting.h" -#include <string> #include <vector> namespace llvm { diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index cfcffeb..e190bea 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -140,30 +140,45 @@ static void PrintLLVMName(raw_ostream &OS, const Value *V) { // TypePrinting Class: Type printing machinery //===----------------------------------------------------------------------===// -static DenseMap<const Type *, std::string> &getTypeNamesMap(void *M) { - return *static_cast<DenseMap<const Type *, std::string>*>(M); -} - -void TypePrinting::clear() { - getTypeNamesMap(TypeNames).clear(); -} - -bool TypePrinting::hasTypeName(const Type *Ty) const { - return getTypeNamesMap(TypeNames).count(Ty); -} - -void TypePrinting::addTypeName(const Type *Ty, const std::string &N) { - getTypeNamesMap(TypeNames).insert(std::make_pair(Ty, N)); -} - - -TypePrinting::TypePrinting() { - TypeNames = new DenseMap<const Type *, std::string>(); -} +/// TypePrinting - Type printing machinery. +namespace { +class TypePrinting { + DenseMap<const Type *, std::string> TypeNames; + TypePrinting(const TypePrinting &); // DO NOT IMPLEMENT + void operator=(const TypePrinting&); // DO NOT IMPLEMENT +public: + TypePrinting() {} + ~TypePrinting() {} + + void clear() { + TypeNames.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 { + return TypeNames.count(Ty); + } -TypePrinting::~TypePrinting() { - delete &getTypeNamesMap(TypeNames); -} + + /// 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) { + TypeNames.insert(std::make_pair(Ty, N)); + } + +private: + void CalcTypeName(const Type *Ty, SmallVectorImpl<const Type *> &TypeStack, + raw_ostream &OS, bool IgnoreTopLevelName = false); +}; +} // end anonymous namespace. /// CalcTypeName - Write the specified type to the specified raw_ostream, making /// use of type names or up references to shorten the type name where possible. @@ -172,7 +187,7 @@ void TypePrinting::CalcTypeName(const Type *Ty, raw_ostream &OS, bool IgnoreTopLevelName) { // Check to see if the type is named. if (!IgnoreTopLevelName) { - DenseMap<const Type *, std::string> &TM = getTypeNamesMap(TypeNames); + DenseMap<const Type *, std::string> &TM = TypeNames; DenseMap<const Type *, std::string>::iterator I = TM.find(Ty); if (I != TM.end()) { OS << I->second; @@ -283,10 +298,9 @@ void TypePrinting::CalcTypeName(const Type *Ty, void TypePrinting::print(const Type *Ty, raw_ostream &OS, bool IgnoreTopLevelName) { // Check to see if the type is named. - DenseMap<const Type*, std::string> &TM = getTypeNamesMap(TypeNames); if (!IgnoreTopLevelName) { - DenseMap<const Type*, std::string>::iterator I = TM.find(Ty); - if (I != TM.end()) { + DenseMap<const Type*, std::string>::iterator I = TypeNames.find(Ty); + if (I != TypeNames.end()) { OS << I->second; return; } @@ -304,7 +318,7 @@ void TypePrinting::print(const Type *Ty, raw_ostream &OS, // Cache type name for later use. if (!IgnoreTopLevelName) - TM.insert(std::make_pair(Ty, TypeOS.str())); + TypeNames.insert(std::make_pair(Ty, TypeOS.str())); } namespace { |