diff options
Diffstat (limited to 'include/llvm/Function.h')
-rw-r--r-- | include/llvm/Function.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/include/llvm/Function.h b/include/llvm/Function.h index d42c8d8aa2..3fdbd02500 100644 --- a/include/llvm/Function.h +++ b/include/llvm/Function.h @@ -37,6 +37,7 @@ template<> struct ilist_traits<BasicBlock> static void destroySentinel(BasicBlock *BB) { delete BB; } static iplist<BasicBlock> &getList(Function *F); static ValueSymbolTable *getSymTab(Function *ItemParent); + static int getListOffset(); }; template<> struct ilist_traits<Argument> @@ -47,6 +48,7 @@ template<> struct ilist_traits<Argument> static void destroySentinel(Argument *A) { delete A; } static iplist<Argument> &getList(Function *F); static ValueSymbolTable *getSymTab(Function *ItemParent); + static int getListOffset(); }; class Function : public GlobalValue, public Annotable { @@ -238,6 +240,15 @@ public: /// including any contained basic blocks. /// void dropAllReferences(); + + static unsigned getBasicBlockListOffset() { + Function *Obj = 0; + return reinterpret_cast<unsigned>(&Obj->BasicBlocks); + } + static unsigned getArgumentListOffset() { + Function *Obj = 0; + return reinterpret_cast<unsigned>(&Obj->ArgumentList); + } }; inline ValueSymbolTable * @@ -250,6 +261,17 @@ ilist_traits<Argument>::getSymTab(Function *F) { return F ? &F->getValueSymbolTable() : 0; } +inline int +ilist_traits<BasicBlock>::getListOffset() { + return Function::getBasicBlockListOffset(); +} + +inline int +ilist_traits<Argument>::getListOffset() { + return Function::getArgumentListOffset(); +} + + } // End llvm namespace #endif |