]> granicus.if.org Git - clang/commitdiff
Get rid of the LayoutBaseNonVirtually; it was used to lay out a base either as a...
authorAnders Carlsson <andersca@mac.com>
Wed, 10 Mar 2010 22:26:24 +0000 (22:26 +0000)
committerAnders Carlsson <andersca@mac.com>
Wed, 10 Mar 2010 22:26:24 +0000 (22:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98198 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/RecordLayoutBuilder.cpp
lib/AST/RecordLayoutBuilder.h

index 666b1242d5469bd4cbcdeb7ce01126f37e5a5f4f..f90bf907e94b302fd91a631aef1089e73eca6d5a 100644 (file)
@@ -181,14 +181,20 @@ ASTRecordLayoutBuilder::LayoutNonVirtualBases(const CXXRecordDecl *RD) {
       const CXXRecordDecl *Base =
       cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
       // Skip the PrimaryBase here, as it is laid down first.
-      if (Base != PrimaryBase.getBase() || PrimaryBase.isVirtual())
-        LayoutBaseNonVirtually(Base, false);
+      if (Base != PrimaryBase.getBase() || PrimaryBase.isVirtual()) {
+        // Lay out the base.
+        LayoutNonVirtualBase(Base);
+      }
     }
   }
 }
 
 void ASTRecordLayoutBuilder::LayoutNonVirtualBase(const CXXRecordDecl *RD) {
-  LayoutBaseNonVirtually(RD, false);
+  // Layout the base.
+  uint64_t Offset = LayoutBase(RD);
+  
+  // Add its base class offset.
+  Bases.push_back(std::make_pair(RD, Offset));
 }
 
 void ASTRecordLayoutBuilder::LayoutVirtualBases(const CXXRecordDecl *Class,
@@ -244,7 +250,11 @@ void ASTRecordLayoutBuilder::LayoutVirtualBases(const CXXRecordDecl *Class,
 }
 
 void ASTRecordLayoutBuilder::LayoutVirtualBase(const CXXRecordDecl *RD) {
-  LayoutBaseNonVirtually(RD, true);
+  // Layout the base.
+  uint64_t Offset = LayoutBase(RD);
+
+  // Add its base class offset.
+  VBases.push_back(std::make_pair(RD, Offset));
 }
 
 uint64_t ASTRecordLayoutBuilder::LayoutBase(const CXXRecordDecl *RD) {
@@ -434,18 +444,6 @@ ASTRecordLayoutBuilder::UpdateEmptyClassOffsets(const FieldDecl *FD,
   }
 }
 
-void ASTRecordLayoutBuilder::LayoutBaseNonVirtually(const CXXRecordDecl *RD,
-  bool IsVirtualBase) {
-  // Layout the base.
-  uint64_t Offset = LayoutBase(RD);
-
-  // Add base class offsets.
-  if (IsVirtualBase) 
-    VBases.push_back(std::make_pair(RD, Offset));
-  else
-    Bases.push_back(std::make_pair(RD, Offset));
-}
-
 void ASTRecordLayoutBuilder::Layout(const RecordDecl *D) {
   IsUnion = D->isUnion();
 
@@ -464,9 +462,13 @@ void ASTRecordLayoutBuilder::Layout(const RecordDecl *D) {
     LayoutVtable(RD);
     // PrimaryBase goes first.
     if (PrimaryBase.getBase()) {
-      if (PrimaryBase.isVirtual())
+      if (PrimaryBase.isVirtual()) {
         IndirectPrimaryBases.insert(PrimaryBase.getBase());
-      LayoutBaseNonVirtually(PrimaryBase.getBase(), PrimaryBase.isVirtual());
+        
+        LayoutVirtualBase(PrimaryBase.getBase());
+      } else {
+        LayoutNonVirtualBase(PrimaryBase.getBase());
+      }
     }
     LayoutNonVirtualBases(RD);
   }
index 9a918b1c8a7ae5f17342f93f0d00f443a73e2625..b857a8e32c1d608c6ae85d4ea3c50017c6c97686 100644 (file)
@@ -122,7 +122,6 @@ class ASTRecordLayoutBuilder {
   uint64_t LayoutBase(const CXXRecordDecl *RD);
   
   void LayoutVtable(const CXXRecordDecl *RD);
-  void LayoutBaseNonVirtually(const CXXRecordDecl *RD, bool IsVBase);
 
   /// canPlaceRecordAtOffset - Return whether a record (either a base class
   /// or a field) can be placed at the given offset.