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 | |
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')
-rw-r--r-- | src/libs/3rdparty/cplusplus/Parser.cpp | 23 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/Parser.h | 1 |
2 files changed, 24 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(); diff --git a/src/libs/3rdparty/cplusplus/Parser.h b/src/libs/3rdparty/cplusplus/Parser.h index 71c3afa11b0..1d505024e52 100644 --- a/src/libs/3rdparty/cplusplus/Parser.h +++ b/src/libs/3rdparty/cplusplus/Parser.h @@ -224,6 +224,7 @@ public: bool parseObjCTryStatement(StatementAST *&node); bool parseObjCSynchronizedStatement(StatementAST *&node); + bool parseObjCThrowStatement(StatementAST *&node); bool parseObjCEncodeExpression(ExpressionAST *&node); bool parseObjCProtocolExpression(ExpressionAST *&node); bool parseObjCSelectorExpression(ExpressionAST *&node); |