diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/DeclObjC.cpp | 7 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclObjC.cpp | 11 |
2 files changed, 12 insertions, 6 deletions
diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp index bd8b874735f..0d921e3c0e8 100644 --- a/clang/lib/AST/DeclObjC.cpp +++ b/clang/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/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index 28768fc56b2..872156ee257 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/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; |