diff options
author | Gabor Greif <ggreif@gmail.com> | 2009-03-07 10:00:35 +0000 |
---|---|---|
committer | Gabor Greif <ggreif@gmail.com> | 2009-03-07 10:00:35 +0000 |
commit | b547a181005cc255fa57c61c1c0dbafca5375fb4 (patch) | |
tree | b410d6b76be08d5820401da6eb8f015fdd7d68fc /include/llvm/Module.h | |
parent | 922a881f32df95170cb2c28e1a5ee0053d6f0f90 (diff) |
Remove the burden of dealing with list offsets
from SymbolTableListTraits' clients, and
intead request a nice declarative interface.
Cleans up an IMHO ugly wart.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66331 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Module.h')
-rw-r--r-- | include/llvm/Module.h | 40 |
1 files changed, 9 insertions, 31 deletions
diff --git a/include/llvm/Module.h b/include/llvm/Module.h index 92f58699ca..d706615ac7 100644 --- a/include/llvm/Module.h +++ b/include/llvm/Module.h @@ -33,7 +33,6 @@ template<> struct ilist_traits<Function> static void destroySentinel(Function *F) { delete F; } static iplist<Function> &getList(Module *M); static inline ValueSymbolTable *getSymTab(Module *M); - static int getListOffset(); }; template<> struct ilist_traits<GlobalVariable> : public SymbolTableListTraits<GlobalVariable, Module> { @@ -42,7 +41,6 @@ template<> struct ilist_traits<GlobalVariable> static void destroySentinel(GlobalVariable *GV) { delete GV; } static iplist<GlobalVariable> &getList(Module *M); static inline ValueSymbolTable *getSymTab(Module *M); - static int getListOffset(); }; template<> struct ilist_traits<GlobalAlias> : public SymbolTableListTraits<GlobalAlias, Module> { @@ -51,7 +49,6 @@ template<> struct ilist_traits<GlobalAlias> static void destroySentinel(GlobalAlias *GA) { delete GA; } static iplist<GlobalAlias> &getList(Module *M); static inline ValueSymbolTable *getSymTab(Module *M); - static int getListOffset(); }; /// A Module instance is used to store all the information related to an @@ -294,14 +291,23 @@ public: const GlobalListType &getGlobalList() const { return GlobalList; } /// Get the Module's list of global variables. GlobalListType &getGlobalList() { return GlobalList; } + static iplist<GlobalVariable> Module::*getSublistAccess(GlobalVariable*) { + return &Module::GlobalList; + } /// Get the Module's list of functions (constant). const FunctionListType &getFunctionList() const { return FunctionList; } /// Get the Module's list of functions. FunctionListType &getFunctionList() { return FunctionList; } + static iplist<Function> Module::*getSublistAccess(Function*) { + return &Module::FunctionList; + } /// Get the Module's list of aliases (constant). const AliasListType &getAliasList() const { return AliasList; } /// Get the Module's list of aliases. AliasListType &getAliasList() { return AliasList; } + static iplist<GlobalAlias> Module::*getSublistAccess(GlobalAlias*) { + return &Module::AliasList; + } /// Get the symbol table of global variable and function identifiers const ValueSymbolTable &getValueSymbolTable() const { return *ValSymTab; } /// Get the Module's symbol table of global variable and function identifiers. @@ -395,19 +401,6 @@ public: /// that has "dropped all references", except operator delete. void dropAllReferences(); /// @} - - static unsigned getFunctionListOffset() { - Module *Obj = 0; - return unsigned(reinterpret_cast<uintptr_t>(&Obj->FunctionList)); - } - static unsigned getGlobalVariableListOffset() { - Module *Obj = 0; - return unsigned(reinterpret_cast<uintptr_t>(&Obj->GlobalList)); - } - static unsigned getAliasListOffset() { - Module *Obj = 0; - return unsigned(reinterpret_cast<uintptr_t>(&Obj->AliasList)); - } }; /// An iostream inserter for modules. @@ -436,21 +429,6 @@ ilist_traits<GlobalAlias>::getSymTab(Module *M) { return M ? &M->getValueSymbolTable() : 0; } -inline int -ilist_traits<Function>::getListOffset() { - return Module::getFunctionListOffset(); -} - -inline int -ilist_traits<GlobalVariable>::getListOffset() { - return Module::getGlobalVariableListOffset(); -} - -inline int -ilist_traits<GlobalAlias>::getListOffset() { - return Module::getAliasListOffset(); -} - } // End llvm namespace #endif |