]> granicus.if.org Git - clang/commitdiff
Refactoring to further simplify collection of visible conversion
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 8 Oct 2009 16:33:37 +0000 (16:33 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 8 Oct 2009 16:33:37 +0000 (16:33 +0000)
functions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83552 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/DeclCXX.cpp

index 2d35117a50ba5c7c08093509aea98c118d3c773b..fc5f5934b0e51b1916a6646ac978297d38a05e08 100644 (file)
@@ -357,21 +357,21 @@ CXXRecordDecl::getNestedVisibleConversionFunctions(CXXRecordDecl *RD,
     }
   }
   
+  if (getNumBases() == 0 && getNumVBases() == 0)
+    return;
+  
+  llvm::SmallPtrSet<QualType, 8> ConversionFunctions;
+  if (!inTopClass)
+    collectConversionFunctions(ConversionFunctions);
+  
   for (CXXRecordDecl::base_class_iterator VBase = vbases_begin(),
        E = vbases_end(); VBase != E; ++VBase) {
     CXXRecordDecl *VBaseClassDecl
       = cast<CXXRecordDecl>(VBase->getType()->getAs<RecordType>()->getDecl());
-    if (inTopClass)
-      VBaseClassDecl->getNestedVisibleConversionFunctions(RD,
-                                                        TopConversionsTypeSet,
-                                                        TopConversionsTypeSet);
-    else {
-      llvm::SmallPtrSet<QualType, 8> HiddenConversionTypes;
-        collectConversionFunctions(HiddenConversionTypes);
-      VBaseClassDecl->getNestedVisibleConversionFunctions(RD,
-                                                        TopConversionsTypeSet,
-                                                        HiddenConversionTypes);
-    }
+    VBaseClassDecl->getNestedVisibleConversionFunctions(RD,
+                  TopConversionsTypeSet,
+                  (inTopClass ? TopConversionsTypeSet : ConversionFunctions));
+      
   }
   for (CXXRecordDecl::base_class_iterator Base = bases_begin(),
        E = bases_end(); Base != E; ++Base) {
@@ -379,17 +379,11 @@ CXXRecordDecl::getNestedVisibleConversionFunctions(CXXRecordDecl *RD,
       continue;
     CXXRecordDecl *BaseClassDecl
       = cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl());
-    if (inTopClass)
-      BaseClassDecl->getNestedVisibleConversionFunctions(RD,
-                                                         TopConversionsTypeSet,
-                                                         TopConversionsTypeSet);
-    else {
-      llvm::SmallPtrSet<QualType, 8> HiddenConversionTypes;
-      collectConversionFunctions(HiddenConversionTypes);
-      BaseClassDecl->getNestedVisibleConversionFunctions(RD,
-                                                         TopConversionsTypeSet,
-                                                         HiddenConversionTypes);
-    }
+    
+    BaseClassDecl->getNestedVisibleConversionFunctions(RD,
+                  TopConversionsTypeSet,
+                  (inTopClass ? TopConversionsTypeSet : ConversionFunctions));
+    
   }
 }