From c00e30187c85267645feeb5ad854020272b8a41e Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@trolltech.com>
Date: Thu, 5 Feb 2009 12:41:57 +0100
Subject: [PATCH] Fixes: Parsing objc method definitions.

---
 src/shared/cplusplus/Parser.cpp | 36 +++++++++++++++++++++++++++++++++
 src/shared/cplusplus/Parser.h   |  2 ++
 2 files changed, 38 insertions(+)

diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 32d9b0ac7f4..5268ce9e321 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -3744,6 +3744,42 @@ bool Parser::parseObjCImplementation(DeclarationAST *&)
     }
 
     parseObjClassInstanceVariables();
+    parseObjCMethodDefinitionList();
+    return true;
+}
+
+bool Parser::parseObjCMethodDefinitionList()
+{
+    while (LA() && LA() != T_AT_END) {
+        unsigned start = cursor();
+
+        switch (LA()) {
+        case T_PLUS:
+        case T_MINUS:
+            parseObjCMethodDefinition();
+
+            if (start == cursor())
+                consumeToken();
+            break;
+
+        default:
+            // ### warning message
+            consumeToken();
+            break;
+        } // switch
+    }
+
+    return true;
+}
+
+bool Parser::parseObjCMethodDefinition()
+{
+    if (LA() != T_MINUS && LA() != T_PLUS)
+        return false;
+
+    parseObjCMethodSignature();
+    StatementAST *function_body = 0;
+    parseFunctionBody(function_body);
     return true;
 }
 
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index 38a0840cf95..e6a29d199e2 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -230,6 +230,8 @@ public:
     bool parseObjCMessageReceiver();
     bool parseObjCMessageArguments();
     bool parseObjCSelectorArgs();
+    bool parseObjCMethodDefinitionList();
+    bool parseObjCMethodDefinition();
 
     bool parseObjCProtocolRefs();
     bool parseObjClassInstanceVariables();
-- 
GitLab