]> granicus.if.org Git - clang/commitdiff
Factor appending methods to a vtable out into a separate function.
authorAnders Carlsson <andersca@mac.com>
Fri, 4 Dec 2009 02:39:04 +0000 (02:39 +0000)
committerAnders Carlsson <andersca@mac.com>
Fri, 4 Dec 2009 02:39:04 +0000 (02:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90525 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGVtable.cpp

index c8d4a736839af4f5e913f1963a87be65a20d94db..92c49112c0b32c98ee523abf12bfda7b91ec2888 100644 (file)
@@ -288,6 +288,9 @@ public:
                       bool MorallyVirtual, Index_t OverrideOffset,
                       Index_t Offset, int64_t CurrentVBaseOffset);
 
+  /// AppendMethods - Append the current methods to the vtable.
+  void AppendMethods();
+  
   void InstallThunks() {
     for (BaseReturnTypesMapTy::const_iterator i = BaseReturnTypes.begin(),
          e = BaseReturnTypes.end(); i != e; ++i) {
@@ -537,12 +540,7 @@ public:
 
     assert(submethods.size() == Methods.size() && "Method size mismatch!");
 
-    InstallThunks();
-    D1(printf("============= combining methods\n"));
-    methods.insert(methods.end(), submethods.begin(), submethods.end());
-    
-    Methods.clear();
-    submethods.clear();
+    AppendMethods();
 
     // and then the non-virtual bases.
     NonVirtualBases(RD, Layout, PrimaryBase, PrimaryBaseWasVirtual,
@@ -907,6 +905,15 @@ bool VtableBuilder::OverrideMethod(GlobalDecl GD, llvm::Constant *m,
   return false;
 }
 
+void VtableBuilder::AppendMethods() {
+  InstallThunks();
+  D1(printf("============= combining methods\n"));
+  methods.insert(methods.end(), submethods.begin(), submethods.end());
+  
+  Methods.clear();
+  submethods.clear();
+}
+
 void CGVtableInfo::ComputeMethodVtableIndices(const CXXRecordDecl *RD) {
   
   // Itanium C++ ABI 2.5.2: