diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-07-18 10:25:19 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-08-21 15:33:39 +0200 |
commit | c2d2173934e157c7bbf194391245ff10a308ef91 (patch) | |
tree | 1886d00daf11f2285946bd539eb388fa04b1d0f7 /src/libs/3rdparty/cplusplus/Parser.cpp | |
parent | a32343b96e001450e516dddc755dbe52d4f7f04f (diff) |
C++: Add parser support for @throw statements.
Change-Id: I366733ec821ee264f182f4d4a3cf69cdada20cfc
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
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 9a9c9ced78..b67920266f 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(); |