diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 89d540b6d16da70f182285d13e8e17babbac818c..fcddd740a6b3fb3c8c0e935216a2ddc2bb05d16f 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -2583,7 +2583,7 @@ bool Parser::parseObjCExpression(ExpressionAST *&node) return parseObjCEncodeExpression(node); case T_AT_PROTOCOL: - break; + return parseObjCProtocolExpression(node); case T_AT_SELECTOR: break; @@ -2610,6 +2610,19 @@ bool Parser::parseObjCEncodeExpression(ExpressionAST *&) return true; } +bool Parser::parseObjCProtocolExpression(ExpressionAST *&) +{ + if (LA() != T_AT_PROTOCOL) + return false; + + /*unsigned protocol_token = */ consumeToken(); + unsigned lparen_token = 0, identifier_token = 0, rparen_token = 0; + match(T_LPAREN, &lparen_token); + match(T_IDENTIFIER, &identifier_token); + match(T_RPAREN, &rparen_token); + return true; +} + bool Parser::parseNameId(NameAST *&name) { unsigned start = cursor(); diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h index ba591b96d09cdb3f07193ecda1859e635da5f66f..17e6752110bce67f8ef4eaa1c0696c209391af99 100644 --- a/src/shared/cplusplus/Parser.h +++ b/src/shared/cplusplus/Parser.h @@ -219,6 +219,7 @@ public: SpecifierAST *attributes = 0); bool parseObjCEncodeExpression(ExpressionAST *&node); + bool parseObjCProtocolExpression(ExpressionAST *&node); bool parseObjCProtocolRefs(); bool parseObjClassInstanceVariables();