summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseObjc.cpp
diff options
context:
space:
mode:
authorManman Ren <manman.ren@gmail.com>2016-01-29 19:05:57 +0000
committerManman Ren <manman.ren@gmail.com>2016-01-29 19:05:57 +0000
commit0fe61f868865c4c643cc5576e5ee63f94f382d8a (patch)
treea3552fd5cf72f7493c6f5cbd17a810a8dcdf1d42 /clang/lib/Parse/ParseObjc.cpp
parentd91a12ec116e1a86f79316cae4cc3ace17e53d0a (diff)
downloadbcm5719-llvm-0fe61f868865c4c643cc5576e5ee63f94f382d8a.tar.gz
bcm5719-llvm-0fe61f868865c4c643cc5576e5ee63f94f382d8a.zip
Class Property: parse @dynamic (class).
rdar://23891898 llvm-svn: 259224
Diffstat (limited to 'clang/lib/Parse/ParseObjc.cpp')
-rw-r--r--clang/lib/Parse/ParseObjc.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp
index 0f2c3a43672..5cd7e7ab7e8 100644
--- a/clang/lib/Parse/ParseObjc.cpp
+++ b/clang/lib/Parse/ParseObjc.cpp
@@ -2353,6 +2353,31 @@ Decl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {
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(SourceLocation atLoc) {
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))
OpenPOWER on IntegriCloud