diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-08-20 18:02:42 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-08-20 18:02:42 +0000 |
commit | f6414927e67e27d9324d8d179c5f7ea620443924 (patch) | |
tree | c19cf1617d0e9ecc8855d13503ab6b1a1e326598 /lib | |
parent | 1536839607e42fdb7133b7830a1ff84b378c509b (diff) |
Fix attributes on Obj-C interfaces & methods.
- Drop MethodAttrs parameter to ObjCMethodDecl
- Call ProcessDeclAttributeList for interface & method decls.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55068 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/DeclObjC.cpp | 7 | ||||
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 11 |
2 files changed, 12 insertions, 6 deletions
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index bd8b874735..0d921e3c0e 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -25,20 +25,19 @@ ObjCMethodDecl *ObjCMethodDecl::Create(ASTContext &C, SourceLocation endLoc, Selector SelInfo, QualType T, Decl *contextDecl, - AttributeList *M, bool isInstance, + bool isInstance, bool isVariadic, bool isSynthesized, ImplementationControl impControl) { void *Mem = C.getAllocator().Allocate<ObjCMethodDecl>(); return new (Mem) ObjCMethodDecl(beginLoc, endLoc, SelInfo, T, contextDecl, - M, isInstance, + isInstance, isVariadic, isSynthesized, impControl); } ObjCMethodDecl::~ObjCMethodDecl() { delete [] ParamInfo; - //delete [] MethodAttrs; // FIXME: Also destroy the stored Expr*. } void ObjCMethodDecl::Destroy(ASTContext& C) { @@ -401,7 +400,7 @@ void ObjCInterfaceDecl::addPropertyMethods( ObjCMethodDecl::Create(Context, property->getLocation(), property->getLocation(), property->getGetterName(), resultDeclType, - this, 0, + this, true, false, true, ObjCMethodDecl::Required); property->setGetterMethodDecl(ObjCMethod); insMethods.push_back(ObjCMethod); diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 28768fc56b..872156ee25 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -98,8 +98,10 @@ ActOnStartClassInterface(SourceLocation AtInterfaceLoc, IDecl->setForwardDecl(false); } } else { - IDecl = ObjCInterfaceDecl::Create(Context, AtInterfaceLoc, + IDecl = ObjCInterfaceDecl::Create(Context, AtInterfaceLoc, ClassName, ClassLoc); + if (AttrList) + ProcessDeclAttributeList(IDecl, AttrList); ObjCInterfaceDecls[ClassName] = IDecl; // Remember that this needs to be removed when the scope is popped. @@ -491,6 +493,9 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation( if (!IDecl) { // Legacy case of @implementation with no corresponding @interface. // Build, chain & install the interface decl into the identifier. + + // FIXME: Do we support attributes on the @implementation? If so + // we should copy them over. IDecl = ObjCInterfaceDecl::Create(Context, AtClassImplLoc, ClassName, ClassLoc, false, true); ObjCInterfaceDecls[ClassName] = IDecl; @@ -960,12 +965,14 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration( ObjCMethodDecl* ObjCMethod = ObjCMethodDecl::Create(Context, MethodLoc, EndLoc, Sel, resultDeclType, - ClassDecl, AttrList, + ClassDecl, MethodType == tok::minus, isVariadic, false, MethodDeclKind == tok::objc_optional ? ObjCMethodDecl::Optional : ObjCMethodDecl::Required); + if (AttrList) + ProcessDeclAttributeList(ObjCMethod, AttrList); llvm::SmallVector<ParmVarDecl*, 16> Params; |