summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <qtc-committer@nokia.com>2009-02-06 15:51:17 +0100
committerRoberto Raggi <qtc-committer@nokia.com>2009-02-06 15:51:17 +0100
commitdd65867d17e5b9dfbf87e2d0067759cd35a14522 (patch)
tree671a5379b38d460da3180e0a282d936fdc2ccdbc /src/shared/cplusplus/Parser.cpp
parent7b2b18277458dac2cfa18622d65efd242e8867c9 (diff)
downloadqt-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.cpp33
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;
}