From bc16aeab78748cca01a9d84fff71dd1109633ecd Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Wed, 12 Aug 2009 23:00:59 +0000 Subject: [PATCH] Refactor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78854 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGCXX.cpp | 38 +++++++++++++++++------------------ lib/CodeGen/CodeGenFunction.h | 2 ++ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp index 80781ad934..e63bd7c87e 100644 --- a/lib/CodeGen/CGCXX.cpp +++ b/lib/CodeGen/CGCXX.cpp @@ -621,6 +621,22 @@ llvm::Constant *CodeGenFunction::GenerateRtti(const CXXRecordDecl *RD) { return Rtti; } +void CodeGenFunction::GenerateMethods(std::vector &methods, + const CXXRecordDecl *RD, + llvm::Type *Ptr8Ty) { + typedef CXXRecordDecl::method_iterator meth_iter; + llvm::Constant *m; + + for (meth_iter mi = RD->method_begin(), me = RD->method_end(); mi != me; + ++mi) { + if (mi->isVirtual()) { + m = CGM.GetAddrOfFunction(GlobalDecl(*mi)); + m = llvm::ConstantExpr::getBitCast(m, Ptr8Ty); + methods.push_back(m); + } + } +} + void CodeGenFunction::GenerateVtableForBase(const CXXRecordDecl *RD, const CXXRecordDecl *Class, llvm::Constant *rtti, @@ -700,29 +716,13 @@ void CodeGenFunction::GenerateVtableForBase(const CXXRecordDecl *RD, } if (!isPrimary) { - if (!RD) - return; - - for (meth_iter mi = RD->method_begin(), me = RD->method_end(); mi != me; - ++mi) { - if (mi->isVirtual()) { - m = CGM.GetAddrOfFunction(GlobalDecl(*mi)); - m = llvm::ConstantExpr::getBitCast(m, Ptr8Ty); - methods.push_back(m); - } - } + if (RD) + GenerateMethods(methods, RD, Ptr8Ty); return; } // And add the virtuals for the class to the primary vtable. - for (meth_iter mi = Class->method_begin(), me = Class->method_end(); mi != me; - ++mi) { - if (mi->isVirtual()) { - m = CGM.GetAddrOfFunction(GlobalDecl(*mi)); - m = llvm::ConstantExpr::getBitCast(m, Ptr8Ty); - methods.push_back(m); - } - } + GenerateMethods(methods, Class, Ptr8Ty); } llvm::Value *CodeGenFunction::GenerateVtable(const CXXRecordDecl *RD) { diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index 226c272c31..75dd3f55f9 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -359,6 +359,8 @@ public: void FinishFunction(SourceLocation EndLoc=SourceLocation()); llvm::Constant *GenerateRtti(const CXXRecordDecl *RD); + void GenerateMethods(std::vector &methods, + const CXXRecordDecl *RD, llvm::Type *Ptr8Ty); void GenerateVtableForBase(const CXXRecordDecl *RD, const CXXRecordDecl *Class, llvm::Constant *rtti, -- 2.40.0