From dd65867d17e5b9dfbf87e2d0067759cd35a14522 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <qtc-committer@nokia.com>
Date: Fri, 6 Feb 2009 15:51:17 +0100
Subject: [PATCH] Fixes: Parsing of objc selector expressions.

---
 src/shared/cplusplus/Parser.cpp | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index bd2f88abce3..fcdfd547f11 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;
 }
-- 
GitLab