diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/DeclObjC.cpp | 12 | ||||
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 8 |
2 files changed, 17 insertions, 3 deletions
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index 2d959445d4..a5eb07a84c 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -198,6 +198,18 @@ void ObjCInterfaceDecl::addProperties(ObjCPropertyDecl **Properties, } /// addProperties - Insert property declaration AST nodes into +/// ObjCProtocolDecl's PropertyDecl field. +/// +void ObjCProtocolDecl::addProperties(ObjCPropertyDecl **Properties, + unsigned NumProperties) { + if (NumProperties == 0) return; + + NumPropertyDecl = NumProperties; + PropertyDecl = new ObjCPropertyDecl*[NumProperties]; + memcpy(PropertyDecl, Properties, NumProperties*sizeof(ObjCPropertyDecl*)); +} + +/// addProperties - Insert property declaration AST nodes into /// ObjCCategoryDecl's PropertyDecl field. /// void ObjCCategoryDecl::addProperties(ObjCPropertyDecl **Properties, diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 3b6f8eccdb..eb9fa433d9 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -695,13 +695,15 @@ void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl, || isa<ObjCProtocolDecl>(ClassDecl); bool checkIdenticalMethods = isa<ObjCImplementationDecl>(ClassDecl); - // TODO: property declaration in category and protocols. if (pNum != 0) if (ObjCInterfaceDecl *IDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) IDecl->addProperties((ObjCPropertyDecl**)allProperties, pNum); + else if (ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(ClassDecl)) + CDecl->addProperties((ObjCPropertyDecl**)allProperties, pNum); + else if (ObjCProtocolDecl *PDecl = dyn_cast<ObjCProtocolDecl>(ClassDecl)) + PDecl->addProperties((ObjCPropertyDecl**)allProperties, pNum); else - if (ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(ClassDecl)) - CDecl->addProperties((ObjCPropertyDecl**)allProperties, pNum); + assert(false && "ActOnAtEnd - property declaration misplaced"); for (unsigned i = 0; i < allNum; i++ ) { ObjCMethodDecl *Method = |