diff options
author | Chris Lattner <sabre@nondot.org> | 2001-10-03 19:28:15 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2001-10-03 19:28:15 +0000 |
commit | 4387370c1c6dd64ad01be0fc91836616d908e917 (patch) | |
tree | bb7a8e03db70bb1140ee30677acd097baa8c1a29 | |
parent | 6a57baa295bb3dbd389581df968536f594709bdb (diff) |
Factor parentness out of Module & GlobalVariable into GlobalValue
Implement SymbolTable debug/dump utility
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@710 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ConstPoolVals.h | 5 | ||||
-rw-r--r-- | include/llvm/Function.h | 6 | ||||
-rw-r--r-- | include/llvm/GlobalValue.h | 11 | ||||
-rw-r--r-- | include/llvm/GlobalVariable.h | 5 | ||||
-rw-r--r-- | include/llvm/SymbolTable.h | 2 | ||||
-rw-r--r-- | lib/VMCore/ConstPoolVals.cpp | 7 | ||||
-rw-r--r-- | lib/VMCore/Function.cpp | 3 | ||||
-rw-r--r-- | lib/VMCore/SymbolTable.cpp | 26 |
8 files changed, 46 insertions, 19 deletions
diff --git a/include/llvm/ConstPoolVals.h b/include/llvm/ConstPoolVals.h index 235ab12f26..3fe8e099cf 100644 --- a/include/llvm/ConstPoolVals.h +++ b/include/llvm/ConstPoolVals.h @@ -232,10 +232,7 @@ protected: ConstPoolPointerReference(GlobalValue *GV); ~ConstPoolPointerReference() {} public: - static ConstPoolPointerReference *get(GlobalValue *GV) { - // FIXME: These should all be shared! - return new ConstPoolPointerReference(GV); - } + static ConstPoolPointerReference *get(GlobalValue *GV); virtual string getStrValue() const; diff --git a/include/llvm/Function.h b/include/llvm/Function.h index d7c35b3c04..fe878bf45e 100644 --- a/include/llvm/Function.h +++ b/include/llvm/Function.h @@ -38,8 +38,6 @@ private: BasicBlocksType BasicBlocks; // The basic blocks ArgumentListType ArgumentList; // The formal arguments - Module *Parent; // The module that contains this method - friend class ValueHolder<Method, Module, Module>; void setParent(Module *parent); @@ -58,10 +56,6 @@ public: bool isExternal() const { return BasicBlocks.empty(); } - // Get the class structure that this method is contained inside of... - inline Module *getParent() { return Parent; } - inline const Module *getParent() const { return Parent; } - // Get the underlying elements of the Method... inline const ArgumentListType &getArgumentList() const{ return ArgumentList; } inline ArgumentListType &getArgumentList() { return ArgumentList; } diff --git a/include/llvm/GlobalValue.h b/include/llvm/GlobalValue.h index 394e2a262a..baee0bf4e0 100644 --- a/include/llvm/GlobalValue.h +++ b/include/llvm/GlobalValue.h @@ -17,14 +17,21 @@ class GlobalValue : public User { GlobalValue(const GlobalValue &); // do not implement protected: GlobalValue(const Type *Ty, ValueTy vty, const string &name = "") - : User(Ty, vty, name) {} + : User(Ty, vty, name) { Parent = 0; } + + Module *Parent; public: + ~GlobalValue() {} - // getType - Global values are always pointers (FIXME, methods should be ptrs too!) + // getType - Global values are always pointers. inline const PointerType *getType() const { return (const PointerType*)User::getType(); } + // Get the module that this global value is contained inside of... + inline Module *getParent() { return Parent; } + inline const Module *getParent() const { return Parent; } + // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const GlobalValue *T) { return true; } static inline bool classof(const Value *V) { diff --git a/include/llvm/GlobalVariable.h b/include/llvm/GlobalVariable.h index 6d6de14146..2e298058f5 100644 --- a/include/llvm/GlobalVariable.h +++ b/include/llvm/GlobalVariable.h @@ -19,8 +19,6 @@ class ConstPoolVal; class PointerType; class GlobalVariable : public GlobalValue { - Module *Parent; // The module that contains this method - friend class ValueHolder<GlobalVariable, Module, Module>; void setParent(Module *parent) { Parent = parent; } @@ -33,9 +31,6 @@ public: // Specialize setName to handle symbol table majik... virtual void setName(const string &name, SymbolTable *ST = 0); - inline Module *getParent() { return Parent; } - inline const Module *getParent() const { return Parent; } - // The initializer for the global variable/constant is held by Operands[0] if // an initializer is specified. // diff --git a/include/llvm/SymbolTable.h b/include/llvm/SymbolTable.h index bae9eb1481..69ff3ddad5 100644 --- a/include/llvm/SymbolTable.h +++ b/include/llvm/SymbolTable.h @@ -103,6 +103,8 @@ public: return find(TypeID)->second.end(); } + void dump() const; // Debug method, print out symbol table + private: // insertEntry - Insert a value into the symbol table with the specified // name... diff --git a/lib/VMCore/ConstPoolVals.cpp b/lib/VMCore/ConstPoolVals.cpp index eeb7a43069..be1e582d15 100644 --- a/lib/VMCore/ConstPoolVals.cpp +++ b/lib/VMCore/ConstPoolVals.cpp @@ -343,3 +343,10 @@ ConstPoolPointer *ConstPoolPointer::getNull(const PointerType *Ty) { return Result; } +//---- ConstPoolPointerReference::get() implementation... +// +ConstPoolPointerReference *ConstPoolPointerReference::get(GlobalValue *GV) { + assert(GV->getParent()); + // FIXME: These should all be shared! + return new ConstPoolPointerReference(GV); +} diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 372d0d28b9..6e30fe80a7 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -29,7 +29,6 @@ Method::Method(const MethodType *Ty, const string &name) : GlobalValue(PointerType::get(Ty), Value::MethodVal, name), SymTabValue(this), BasicBlocks(this), ArgumentList(this, this) { assert(::isa<MethodType>(Ty) && "Method signature must be of method type!"); - Parent = 0; } Method::~Method() { @@ -90,7 +89,7 @@ GlobalVariable::GlobalVariable(const Type *Ty, bool isConstant, ConstPoolVal *Initializer = 0, const string &Name = "") : GlobalValue(PointerType::get(Ty), Value::GlobalVariableVal, Name), - Parent(0), Constant(isConstant) { + Constant(isConstant) { if (Initializer) Operands.push_back(Use((Value*)Initializer, this)); assert(!isConstant || hasInitializer() && diff --git a/lib/VMCore/SymbolTable.cpp b/lib/VMCore/SymbolTable.cpp index 12bf0c7f1b..09465305e6 100644 --- a/lib/VMCore/SymbolTable.cpp +++ b/lib/VMCore/SymbolTable.cpp @@ -173,3 +173,29 @@ void SymbolTable::refineAbstractType(const DerivedType *OldType, cast<const DerivedType>(NewType)->addAbstractTypeUser(this); } } + + +#ifndef NDEBUG +#include "llvm/Assembly/Writer.h" +#include <algorithm> + +static void DumpVal(const pair<const string, Value *> &V) { + cout << " '%" << V.first << "' = " << V.second << endl; +} + +static void DumpPlane(const pair<const Type *, map<const string, Value *> >&P) { + cout << " Plane: " << P.first << endl; + for_each(P.second.begin(), P.second.end(), DumpVal); +} + +void SymbolTable::dump() const { + cout << "Symbol table dump:\n"; + for_each(begin(), end(), DumpPlane); + + if (ParentSymTab) { + cout << "Parent "; + ParentSymTab->dump(); + } +} + +#endif |