diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-07-31 16:53:05 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-07-31 16:53:05 +0200 |
commit | e2051267743b521c44602480441b5e4c0de04396 (patch) | |
tree | fae9b639e6867e476c85634ad143d214d3bbf4ae /src/shared/cplusplus/Parser.cpp | |
parent | 49672804490cc3b6561432497f4a999a35d6ad07 (diff) | |
download | qt-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.cpp | 25 |
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) |