diff options
author | Roberto Raggi <qtc-committer@nokia.com> | 2009-02-06 15:51:17 +0100 |
---|---|---|
committer | Roberto Raggi <qtc-committer@nokia.com> | 2009-02-06 15:51:17 +0100 |
commit | dd65867d17e5b9dfbf87e2d0067759cd35a14522 (patch) | |
tree | 671a5379b38d460da3180e0a282d936fdc2ccdbc /src/shared/cplusplus/Parser.cpp | |
parent | 7b2b18277458dac2cfa18622d65efd242e8867c9 (diff) | |
download | qt-creator-dd65867d17e5b9dfbf87e2d0067759cd35a14522.tar.gz |
Fixes: Parsing of objc selector expressions.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index bd2f88abce..fcdfd547f1 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -2718,7 +2718,38 @@ bool Parser::parseObjCSelectorExpression(ExpressionAST *&) /*unsigned selector_token = */consumeToken(); unsigned lparen_token = 0, rparen_token = 0; match(T_LPAREN, &lparen_token); - parseObjCMethodSignature(); + + if (LA() == T_COLON || LA() == T_COLON_COLON) { + consumeToken(); + + if (LA() == T_RPAREN) { + _translationUnit->warning(cursor(), + "error expended a selector"); + match(T_RPAREN, &rparen_token); + return true; + } + } else if (lookAtObjCSelector()) { + unsigned start = cursor(); + consumeToken(); + if (LA() != T_RPAREN) + rewind(start); + else { + match(T_RPAREN, &rparen_token); + return true; + } + } + + while (lookAtObjCSelector()) { + parseObjCSelector(); + if (LA() == T_COLON || LA() == T_COLON_COLON) + consumeToken(); + else { + _translationUnit->error(cursor(), + "expected :"); + break; + } + } + match(T_RPAREN, &rparen_token); return true; } |