aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2013-07-18 10:25:19 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2013-08-21 15:33:39 +0200
commitc2d2173934e157c7bbf194391245ff10a308ef91 (patch)
tree1886d00daf11f2285946bd539eb388fa04b1d0f7 /src/libs/3rdparty/cplusplus/Parser.cpp
parenta32343b96e001450e516dddc755dbe52d4f7f04f (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.cpp23
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();