summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2009-07-31 16:53:05 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2009-07-31 16:53:05 +0200
commite2051267743b521c44602480441b5e4c0de04396 (patch)
treefae9b639e6867e476c85634ad143d214d3bbf4ae /src/shared/cplusplus/Parser.cpp
parent49672804490cc3b6561432497f4a999a35d6ad07 (diff)
downloadqt-creator-e2051267743b521c44602480441b5e4c0de04396.tar.gz
Added @synchronized parsing for Objective-C.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index ee8e714f64..70bc64ae3d 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -198,6 +198,10 @@ bool Parser::skipUntilStatement()
case T_USING:
return true;
+ case T_AT_SYNCHRONIZED:
+ if (objCEnabled())
+ return true;
+
default:
consumeToken();
}
@@ -1932,6 +1936,10 @@ bool Parser::parseStatement(StatementAST *&node)
return true;
}
+ case T_AT_SYNCHRONIZED:
+ if (objCEnabled())
+ return parseObjCSynchronizedStatement(node);
+
default:
if (LA() == T_IDENTIFIER && LA(2) == T_COLON)
return parseLabeledStatement(node);
@@ -2894,6 +2902,23 @@ bool Parser::parseObjCStringLiteral(ExpressionAST *&node)
return true;
}
+bool Parser::parseObjCSynchronizedStatement(StatementAST *&node)
+{
+ if (LA() != T_AT_SYNCHRONIZED)
+ return false;
+
+ ObjCSynchronizedStatementAST *ast = new (_pool) ObjCSynchronizedStatementAST;
+
+ ast->synchronized_token = consumeToken();
+ match(T_LPAREN, &ast->lparen_token);
+ parseExpression(ast->synchronized_object);
+ match(T_RPAREN, &ast->rparen_token);
+ parseStatement(ast->statement);
+
+ node = ast;
+ return true;
+}
+
bool Parser::parseObjCEncodeExpression(ExpressionAST *&node)
{
if (LA() != T_AT_ENCODE)