summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index c3faca243f..c8a354811f 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -4061,6 +4061,39 @@ bool Parser::parseObjCMethodDefinitionList()
consumeToken();
break;
+ case T_AT_SYNTHESIZE: {
+ consumeToken();
+ unsigned identifier_token = 0;
+ match(T_IDENTIFIER, &identifier_token);
+
+ if (LA() == T_EQUAL) {
+ consumeToken();
+
+ unsigned aliassed_identifier_token = 0;
+ match(T_IDENTIFIER, &aliassed_identifier_token);
+ }
+
+ while (LA() == T_COMMA) {
+ consumeToken();
+
+ match(T_IDENTIFIER, &identifier_token);
+
+ if (LA() == T_EQUAL) {
+ consumeToken();
+
+ unsigned aliassed_identifier_token = 0;
+ match(T_IDENTIFIER, &aliassed_identifier_token);
+ }
+ }
+
+ unsigned semicolon_token = 0;
+ match(T_SEMICOLON, &semicolon_token);
+
+ break;
+ }
+
+ // TODO: @dynamic
+
default:
if (LA() == T_EXTERN && LA(2) == T_STRING_LITERAL) {
DeclarationAST *declaration = 0;
@@ -4235,7 +4268,11 @@ bool Parser::parseObjCPropertyDeclaration(DeclarationAST *&, SpecifierAST *)
if (LA() == T_LPAREN) {
unsigned lparen_token = 0, rparen_token = 0;
match(T_LPAREN, &lparen_token);
- while (parseObjCPropertyAttribute()) {
+ if (parseObjCPropertyAttribute()) {
+ while (LA() == T_COMMA) {
+ consumeToken();
+ parseObjCPropertyAttribute();
+ }
}
match(T_RPAREN, &rparen_token);
}