From fb78b33018bdd84d1879ae8a15f53d6b474982e9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 18 Jun 2011 21:23:04 +0000 Subject: [PATCH] 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 --- include/llvm/Assembly/Writer.h | 34 ----------------- include/llvm/Type.h | 1 - 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 c5b239079a0..78c27f03a21 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 - namespace llvm { 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 diff --git a/include/llvm/Type.h b/include/llvm/Type.h index 95b2f926bff..61101548a59 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 #include namespace llvm { diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index cfcffebd0d2..e190beaa277 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 &getTypeNamesMap(void *M) { - return *static_cast*>(M); -} +/// TypePrinting - Type printing machinery. +namespace { +class TypePrinting { + DenseMap 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); + } -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(); -} - -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 &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 &TM = getTypeNamesMap(TypeNames); + DenseMap &TM = TypeNames; DenseMap::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 &TM = getTypeNamesMap(TypeNames); if (!IgnoreTopLevelName) { - DenseMap::iterator I = TM.find(Ty); - if (I != TM.end()) { + DenseMap::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 {