Remove ASTContext::addRecordToClass.

llvm-svn: 70780
This commit is contained in:
Daniel Dunbar 2009-05-03 14:27:48 +00:00
parent 3434d492b3
commit e49e9c3a52
3 changed files with 5 additions and 61 deletions

View File

@ -97,10 +97,6 @@ class ASTContext {
llvm::DenseMap<unsigned, FixedWidthIntType*> SignedFixedWidthIntTypes; llvm::DenseMap<unsigned, FixedWidthIntType*> SignedFixedWidthIntTypes;
llvm::DenseMap<unsigned, FixedWidthIntType*> UnsignedFixedWidthIntTypes; llvm::DenseMap<unsigned, FixedWidthIntType*> UnsignedFixedWidthIntTypes;
// FIXME: ASTRecordForInterface/ASTFieldForIvarRef and addRecordToClass and
// getFieldDecl be part of the backend (i.e. CodeGenTypes)?
llvm::DenseMap<const ObjCInterfaceDecl*, RecordDecl*> ASTRecordForInterface;
/// BuiltinVaListType - built-in va list type. /// BuiltinVaListType - built-in va list type.
/// This is initially null and set by Sema::LazilyCreateBuiltin when /// This is initially null and set by Sema::LazilyCreateBuiltin when
@ -539,7 +535,6 @@ public:
const ASTRecordLayout & const ASTRecordLayout &
getASTObjCImplementationLayout(const ObjCImplementationDecl *D); getASTObjCImplementationLayout(const ObjCImplementationDecl *D);
const RecordDecl *addRecordToClass(const ObjCInterfaceDecl *D);
void CollectObjCIvars(const ObjCInterfaceDecl *OI, void CollectObjCIvars(const ObjCInterfaceDecl *OI,
llvm::SmallVectorImpl<FieldDecl*> &Fields); llvm::SmallVectorImpl<FieldDecl*> &Fields);

View File

@ -24,7 +24,7 @@ namespace clang {
/// This class contains layout information for one RecordDecl, /// This class contains layout information for one RecordDecl,
/// which is a struct/union/class. The decl represented must be a definition, /// which is a struct/union/class. The decl represented must be a definition,
/// not a forward declaration. /// not a forward declaration.
/// This class is also used to contain layout informaiton for one /// This class is also used to contain layout information for one
/// ObjCInterfaceDecl. FIXME - Find appropriate name. /// ObjCInterfaceDecl. FIXME - Find appropriate name.
/// These objects are managed by ASTContext. /// These objects are managed by ASTContext.
class ASTRecordLayout { class ASTRecordLayout {

View File

@ -71,15 +71,6 @@ ASTContext::~ASTContext() {
} }
} }
{
llvm::DenseMap<const ObjCInterfaceDecl*, RecordDecl*>::iterator
I = ASTRecordForInterface.begin(), E = ASTRecordForInterface.end();
while (I != E) {
RecordDecl *R = (I++)->second;
R->Destroy(*this);
}
}
// Destroy nested-name-specifiers. // Destroy nested-name-specifiers.
for (llvm::FoldingSet<NestedNameSpecifier>::iterator for (llvm::FoldingSet<NestedNameSpecifier>::iterator
NNS = NestedNameSpecifiers.begin(), NNS = NestedNameSpecifiers.begin(),
@ -676,7 +667,10 @@ static void CollectLocalObjCIvars(ASTContext *Ctx,
if (!IVDecl->isInvalidDecl()) if (!IVDecl->isInvalidDecl())
Fields.push_back(cast<FieldDecl>(IVDecl)); Fields.push_back(cast<FieldDecl>(IVDecl));
} }
// look into properties. // Look into properties.
//
// FIXME: This needs to go away, synthesized ivars shouldn't be
// accessible from the interface decl.
for (ObjCInterfaceDecl::prop_iterator I = OI->prop_begin(*Ctx), for (ObjCInterfaceDecl::prop_iterator I = OI->prop_begin(*Ctx),
E = OI->prop_end(*Ctx); I != E; ++I) { E = OI->prop_end(*Ctx); I != E; ++I) {
if (ObjCIvarDecl *IV = (*I)->getPropertyIvarDecl()) if (ObjCIvarDecl *IV = (*I)->getPropertyIvarDecl())
@ -691,51 +685,6 @@ void ASTContext::CollectObjCIvars(const ObjCInterfaceDecl *OI,
CollectLocalObjCIvars(this, OI, Fields); CollectLocalObjCIvars(this, OI, Fields);
} }
/// addRecordToClass - produces record info. for the class for its
/// ivars and all those inherited.
///
const RecordDecl *ASTContext::addRecordToClass(const ObjCInterfaceDecl *D) {
assert(!D->isForwardDecl() && "Invalid decl!");
RecordDecl *&RD = ASTRecordForInterface[D];
if (RD)
return RD;
llvm::SmallVector<FieldDecl*, 32> RecFields;
CollectLocalObjCIvars(this, D, RecFields);
RD = RecordDecl::Create(*this, TagDecl::TK_struct, 0, D->getLocation(),
D->getIdentifier());
const RecordDecl *SRD;
if (const ObjCInterfaceDecl *SuperClass = D->getSuperClass()) {
SRD = addRecordToClass(SuperClass);
} else {
SRD = RecordDecl::Create(*this, TagDecl::TK_struct, 0, SourceLocation(), 0);
const_cast<RecordDecl*>(SRD)->completeDefinition(*this);
}
RD->addDecl(*this,
FieldDecl::Create(*this, RD,
SourceLocation(),
0,
getTagDeclType(const_cast<RecordDecl*>(SRD)),
0, false));
/// FIXME! Can do collection of ivars and adding to the record while
/// doing it.
for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
RD->addDecl(*this,
FieldDecl::Create(*this, RD,
RecFields[i]->getLocation(),
RecFields[i]->getIdentifier(),
RecFields[i]->getType(),
RecFields[i]->getBitWidth(), false));
}
RD->completeDefinition(*this);
return RD;
}
/// getInterfaceLayoutImpl - Get or compute information about the /// getInterfaceLayoutImpl - Get or compute information about the
/// layout of the given interface. /// layout of the given interface.
/// ///