Some code refactoring per Daniel's feedback.

llvm-svn: 77030
This commit is contained in:
Fariborz Jahanian 2009-07-25 01:08:28 +00:00
parent 43d19d61d4
commit f464edf81f
1 changed files with 12 additions and 16 deletions

View File

@ -575,21 +575,19 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
for (unsigned i = 0; i < NumInitializers; i++) { for (unsigned i = 0; i < NumInitializers; i++) {
CXXBaseOrMemberInitializer *Member = Initializers[i]; CXXBaseOrMemberInitializer *Member = Initializers[i];
const void * Key = Member->isBaseInitializer() ? if (Member->isBaseInitializer())
reinterpret_cast<const void *>( AllBaseFields[Member->getBaseClass()->getAsRecordType()] = Member;
Member->getBaseClass()->getAsRecordType()) : else
reinterpret_cast<const void *>(Member->getMember()); AllBaseFields[Member->getMember()] = Member;
AllBaseFields[Key] = Member;
} }
// Push virtual bases before others. // Push virtual bases before others.
for (CXXRecordDecl::base_class_iterator VBase = for (CXXRecordDecl::base_class_iterator VBase =
ClassDecl->vbases_begin(), ClassDecl->vbases_begin(),
E = ClassDecl->vbases_end(); VBase != E; ++VBase) { E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
const void *Key = reinterpret_cast<const void *>( if (CXXBaseOrMemberInitializer *Value =
VBase->getType()->getAsRecordType()); AllBaseFields.lookup(VBase->getType()->getAsRecordType()))
if (AllBaseFields[Key]) AllToInit.push_back(Value);
AllToInit.push_back(AllBaseFields[Key]);
else { else {
CXXRecordDecl *VBaseDecl = CXXRecordDecl *VBaseDecl =
cast<CXXRecordDecl>(VBase->getType()->getAsRecordType()->getDecl()); cast<CXXRecordDecl>(VBase->getType()->getAsRecordType()->getDecl());
@ -611,10 +609,9 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
// Virtuals are in the virtual base list and already constructed. // Virtuals are in the virtual base list and already constructed.
if (Base->isVirtual()) if (Base->isVirtual())
continue; continue;
const void *Key = reinterpret_cast<const void *>( if (CXXBaseOrMemberInitializer *Value =
Base->getType()->getAsRecordType()); AllBaseFields.lookup(Base->getType()->getAsRecordType()))
if (AllBaseFields[Key]) AllToInit.push_back(Value);
AllToInit.push_back(AllBaseFields[Key]);
else { else {
CXXRecordDecl *BaseDecl = CXXRecordDecl *BaseDecl =
cast<CXXRecordDecl>(Base->getType()->getAsRecordType()->getDecl()); cast<CXXRecordDecl>(Base->getType()->getAsRecordType()->getDecl());
@ -633,9 +630,8 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
// non-static data members. // non-static data members.
for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(), for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
E = ClassDecl->field_end(); Field != E; ++Field) { E = ClassDecl->field_end(); Field != E; ++Field) {
const void * Key = reinterpret_cast<const void *>(*Field); if (CXXBaseOrMemberInitializer *Value = AllBaseFields.lookup(*Field)) {
if (AllBaseFields[Key]) { AllToInit.push_back(Value);
AllToInit.push_back(AllBaseFields[Key]);
continue; continue;
} }