diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2008-04-17 18:25:18 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2008-04-17 18:25:18 +0000 |
commit | 3dd4ba4068e953125b95ce85c723322cdd0a3cb5 (patch) | |
tree | 7b9ff8cf739ce70f51c66224cf5c85c7df68bd03 /lib | |
parent | 4fd8897f81e2d9e2d9b8c6a5f10fe0dae3e52223 (diff) |
Added property decl support for protocols.
Added assertion if unexpected property decls are found where they don't belong.
Consolidated property decl. printing by using a helper function.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49862 91177308-0d34-0410-b5e6-96231b3b80d8
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 = |