diff options
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Parser.cpp')
-rw-r--r-- | src/libs/3rdparty/cplusplus/Parser.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index 9a9c9ced782..b67920266fe 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -335,6 +335,7 @@ bool Parser::skipUntilStatement() case T_AT_TRY: case T_AT_SYNCHRONIZED: + case T_AT_THROW: if (objCEnabled()) return true; @@ -3113,6 +3114,9 @@ bool Parser::parseStatement(StatementAST *&node) case T_AT_SYNCHRONIZED: return objCEnabled() && parseObjCSynchronizedStatement(node); + case T_AT_THROW: + return objCEnabled() && parseObjCThrowStatement(node); + case T_Q_D: case T_Q_Q: { QtMemberDeclarationAST *ast = new (_pool) QtMemberDeclarationAST; @@ -4452,6 +4456,8 @@ bool Parser::parseObjCTryStatement(StatementAST *& /*node*/) return true; } +/// objc-synchronized-statement: +/// @synchronized expression ; bool Parser::parseObjCSynchronizedStatement(StatementAST *&node) { DEBUG_THIS_RULE(); @@ -4470,6 +4476,23 @@ bool Parser::parseObjCSynchronizedStatement(StatementAST *&node) return true; } +/// objc-throw-statement: +/// @ throw expression ; +bool Parser::parseObjCThrowStatement(StatementAST *&/*node*/) +{ + DEBUG_THIS_RULE(); + if (LA() != T_AT_THROW) + return false; + + /*throw_token =*/ consumeToken(); + ExpressionAST *thrown_expression; + parseExpression(thrown_expression); + unsigned semicolon_token; + match(T_SEMICOLON, &semicolon_token); + + return true; +} + bool Parser::parseObjCEncodeExpression(ExpressionAST *&node) { DEBUG_THIS_RULE(); |