Author: mren Date: Fri Jan 29 13:05:57 2016 New Revision: 259224 URL: http://llvm.org/viewvc/llvm-project?rev=259224&view=rev Log: Class Property: parse @dynamic (class).
rdar://23891898 Modified: cfe/trunk/lib/Parse/ParseObjc.cpp cfe/trunk/test/SemaObjC/objc-class-property.m Modified: cfe/trunk/lib/Parse/ParseObjc.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=259224&r1=259223&r2=259224&view=diff ============================================================================== --- cfe/trunk/lib/Parse/ParseObjc.cpp (original) +++ cfe/trunk/lib/Parse/ParseObjc.cpp Fri Jan 29 13:05:57 2016 @@ -2353,6 +2353,31 @@ Decl *Parser::ParseObjCPropertyDynamic(S assert(Tok.isObjCAtKeyword(tok::objc_dynamic) && "ParseObjCPropertyDynamic(): Expected '@dynamic'"); ConsumeToken(); // consume dynamic + + bool isClassProperty = false; + if (Tok.is(tok::l_paren)) { + ConsumeParen(); + const IdentifierInfo *II = Tok.getIdentifierInfo(); + + if (!II) { + Diag(Tok, diag::err_objc_expected_property_attr) << II; + SkipUntil(tok::r_paren, StopAtSemi); + } else { + SourceLocation AttrName = ConsumeToken(); // consume attribute name + if (II->isStr("class")) { + isClassProperty = true; + if (Tok.isNot(tok::r_paren)) { + Diag(Tok, diag::err_expected) << tok::r_paren; + SkipUntil(tok::r_paren, StopAtSemi); + } else + ConsumeParen(); + } else { + Diag(AttrName, diag::err_objc_expected_property_attr) << II; + SkipUntil(tok::r_paren, StopAtSemi); + } + } + } + while (true) { if (Tok.is(tok::code_completion)) { Actions.CodeCompleteObjCPropertyDefinition(getCurScope()); @@ -2371,6 +2396,7 @@ Decl *Parser::ParseObjCPropertyDynamic(S Actions.ActOnPropertyImplDecl( getCurScope(), atLoc, propertyLoc, false, propertyId, nullptr, SourceLocation(), + isClassProperty ? ObjCPropertyQueryKind::OBJC_PR_query_class : ObjCPropertyQueryKind::OBJC_PR_query_unknown); if (Tok.isNot(tok::comma)) Modified: cfe/trunk/test/SemaObjC/objc-class-property.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/objc-class-property.m?rev=259224&r1=259223&r2=259224&view=diff ============================================================================== --- cfe/trunk/test/SemaObjC/objc-class-property.m (original) +++ cfe/trunk/test/SemaObjC/objc-class-property.m Fri Jan 29 13:05:57 2016 @@ -20,9 +20,10 @@ @end @implementation A -@dynamic x; +@dynamic x; // refers to the instance property +@dynamic (class) x; // refers to the class property @synthesize z; -@dynamic c; +@dynamic c; // refers to the class property @end int test() { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits