Revisited my last patch to be able to do encoding of ivar types with 'id'.

llvm-svn: 43507
This commit is contained in:
Fariborz Jahanian 2007-10-30 18:27:03 +00:00
parent 74a0ae2c2a
commit 18d7b30241
2 changed files with 33 additions and 9 deletions

View File

@ -1193,6 +1193,15 @@ Sema::DeclTy *Sema::ActOnStartCategoryImplementation(
/// Check that class of this category is already completely declared.
if (!IDecl || IDecl->isForwardDecl())
Diag(ClassLoc, diag::err_undef_interface, ClassName->getName());
// We cannot build type 'id' laziliy. It is needed when checking if a
// type is an 'id' (via call to isObjcIdType) even if there is no
// need for the dafult 'id' type.
// FIXME: Depending on the need to compare to 'id', this may have to go
// somewhere else. At this time, this is a good enough place to do type
// encoding of methods and ivars for the rewrite client.
GetObjcIdType(AtCatImplLoc);
/// TODO: Check that CatName, category name, is not used in another
// implementation.
return CDecl;
@ -1261,7 +1270,15 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation(
// Check that there is no duplicate implementation of this class.
if (!ObjcImplementations.insert(ClassName))
Diag(ClassLoc, diag::err_dup_implementation_class, ClassName->getName());
// We cannot build type 'id' laziliy. It is needed when checking if a
// type is an 'id' (via call to isObjcIdType) even if there is no
// need for the dafult 'id' type.
// FIXME: Depending on the need to compare to 'id', this may have to go
// somewhere else. At this time, this is a good enough place to do type
// encoding of methods and ivars for the rewrite client.
GetObjcIdType(AtClassImplLoc);
return IMPDecl;
}
@ -1964,14 +1981,6 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration(
AttributeList *AttrList, tok::ObjCKeywordKind MethodDeclKind) {
llvm::SmallVector<ParmVarDecl*, 16> Params;
// We cannot build type 'id' laziliy. It is needed when checking if a
// type is an 'id' (via call to isObjcIdType) even if there is no
// need for the dafult 'id' type.
// FIXME: Depending on the need to compare to 'id', this may have to go
// somewhere else. At this time, this is a good enough place to do type
// encoding of methods and ivars for the rewrite client.
GetObjcIdType(MethodLoc);
for (unsigned i = 0; i < Sel.getNumArgs(); i++) {
// FIXME: arg->AttrList must be stored too!
QualType argType;

View File

@ -0,0 +1,15 @@
// RUN: clang -rewrite-test -verify %s
@interface Intf
{
id ivar;
id ivar1[12];
id **ivar3;
id (*ivar4) (id, id);
}
@end
@implementation Intf
@end