[cfe-commits] r55068 - in /cfe/trunk: include/clang/AST/DeclObjC.h lib/AST/DeclObjC.cpp lib/Sema/SemaDeclObjC.cpp
Daniel Dunbar
daniel at zuster.org
Wed Aug 20 11:02:42 PDT 2008
Author: ddunbar
Date: Wed Aug 20 13:02:42 2008
New Revision: 55068
URL: http://llvm.org/viewvc/llvm-project?rev=55068&view=rev
Log:
Fix attributes on Obj-C interfaces & methods.
- Drop MethodAttrs parameter to ObjCMethodDecl
- Call ProcessDeclAttributeList for interface & method decls.
Modified:
cfe/trunk/include/clang/AST/DeclObjC.h
cfe/trunk/lib/AST/DeclObjC.cpp
cfe/trunk/lib/Sema/SemaDeclObjC.cpp
Modified: cfe/trunk/include/clang/AST/DeclObjC.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=55068&r1=55067&r2=55068&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/DeclObjC.h (original)
+++ cfe/trunk/include/clang/AST/DeclObjC.h Wed Aug 20 13:02:42 2008
@@ -126,8 +126,6 @@
unsigned NumMethodParams;
/// List of attributes for this method declaration.
- AttributeList *MethodAttrs;
-
SourceLocation EndLoc; // the location of the ';' or '{'.
// The following are only used for method definitions, null otherwise.
@@ -140,7 +138,7 @@
ObjCMethodDecl(SourceLocation beginLoc, SourceLocation endLoc,
Selector SelInfo, QualType T,
Decl *contextDecl,
- AttributeList *M = 0, bool isInstance = true,
+ bool isInstance = true,
bool isVariadic = false,
bool isSynthesized = false,
ImplementationControl impControl = None)
@@ -151,7 +149,7 @@
DeclImplementation(impControl), objcDeclQualifier(OBJC_TQ_None),
MethodContext(static_cast<NamedDecl*>(contextDecl)),
SelName(SelInfo), MethodDeclType(T),
- ParamInfo(0), NumMethodParams(0), MethodAttrs(M),
+ ParamInfo(0), NumMethodParams(0),
EndLoc(endLoc), Body(0), SelfDecl(0), CmdDecl(0) {}
virtual ~ObjCMethodDecl();
@@ -165,7 +163,7 @@
SourceLocation beginLoc,
SourceLocation endLoc, Selector SelInfo,
QualType T, Decl *contextDecl,
- AttributeList *M = 0, bool isInstance = true,
+ bool isInstance = true,
bool isVariadic = false,
bool isSynthesized = false,
ImplementationControl impControl = None);
@@ -214,7 +212,6 @@
ImplicitParamDecl * getCmdDecl() const { return CmdDecl; }
void setCmdDecl(ImplicitParamDecl *decl) { CmdDecl = decl; }
- AttributeList *getMethodAttrs() const {return MethodAttrs;}
bool isInstance() const { return IsInstance; }
bool isVariadic() const { return IsVariadic; }
Modified: cfe/trunk/lib/AST/DeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclObjC.cpp?rev=55068&r1=55067&r2=55068&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclObjC.cpp (original)
+++ cfe/trunk/lib/AST/DeclObjC.cpp Wed Aug 20 13:02:42 2008
@@ -25,20 +25,19 @@
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 @@
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);
Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=55068&r1=55067&r2=55068&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Wed Aug 20 13:02:42 2008
@@ -98,8 +98,10 @@
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 @@
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 @@
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;
More information about the cfe-commits
mailing list