зеркало из https://github.com/microsoft/clang-1.git
Patch to allow @dynamic synthesis of property in a category,
with @synthesize being illegal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62515 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
06a062dc78
Коммит
f034e9cc4d
|
@ -364,8 +364,7 @@ ObjCContainerDecl::FindPropertyDeclaration(IdentifierInfo *PropertyId) const {
|
|||
return property;
|
||||
}
|
||||
|
||||
const ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(this);
|
||||
if (OID) {
|
||||
if (const ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(this)) {
|
||||
// Look through categories.
|
||||
for (ObjCCategoryDecl *Category = OID->getCategoryList();
|
||||
Category; Category = Category->getNextClassCategory()) {
|
||||
|
@ -384,6 +383,16 @@ ObjCContainerDecl::FindPropertyDeclaration(IdentifierInfo *PropertyId) const {
|
|||
if (OID->getSuperClass())
|
||||
return OID->getSuperClass()->FindPropertyDeclaration(PropertyId);
|
||||
}
|
||||
else if (const ObjCCategoryDecl *OCD = dyn_cast<ObjCCategoryDecl>(this)) {
|
||||
// Look through protocols.
|
||||
for (ObjCInterfaceDecl::protocol_iterator I = OCD->protocol_begin(),
|
||||
E = OCD->protocol_end(); I != E; ++I) {
|
||||
ObjCProtocolDecl *Protocol = *I;
|
||||
ObjCPropertyDecl *property = Protocol->FindPropertyDeclaration(PropertyId);
|
||||
if (property)
|
||||
return property;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
// Test that a property can be synthesize in a category
|
||||
// implementation with no error.
|
||||
|
||||
@protocol MyProtocol
|
||||
@property float myFloat;
|
||||
@property float anotherFloat;
|
||||
@end
|
||||
|
||||
@interface MyObject { float anotherFloat; }
|
||||
@end
|
||||
|
||||
@interface MyObject (CAT) <MyProtocol>
|
||||
@end
|
||||
|
||||
@implementation MyObject (CAT)
|
||||
@dynamic myFloat; // OK
|
||||
@synthesize anotherFloat; // expected-error {{@synthesize not allowed in a category's implementation}}
|
||||
@end
|
Загрузка…
Ссылка в новой задаче