From bcadd5b5a782df21f6aa580a0c07736abded519c Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 13 Aug 2010 14:20:00 +0200
Subject: [PATCH] Process ObjC forward class declarations

---
 src/shared/cplusplus/Bind.cpp | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp
index 84bc3b37861..12a2b41d0dd 100644
--- a/src/shared/cplusplus/Bind.cpp
+++ b/src/shared/cplusplus/Bind.cpp
@@ -2020,16 +2020,26 @@ bool Bind::visit(UsingDirectiveAST *ast)
 
 bool Bind::visit(ObjCClassForwardDeclarationAST *ast)
 {
-    FullySpecifiedType type;
+    FullySpecifiedType declSpecifiers;
     for (SpecifierListAST *it = ast->attribute_list; it; it = it->next) {
-        type = this->specifier(it->value, type);
+        declSpecifiers = this->specifier(it->value, declSpecifiers);
     }
+
+    List<ObjCForwardClassDeclaration *> **symbolTail = &ast->symbols;
+
     // unsigned class_token = ast->class_token;
     for (NameListAST *it = ast->identifier_list; it; it = it->next) {
-        /*const Name *value =*/ this->name(it->value);
+        const Name *name = this->name(it->value);
+
+        const unsigned sourceLocation = it->value ? it->value->firstToken() : ast->firstToken();
+        ObjCForwardClassDeclaration *fwd = control()->newObjCForwardClassDeclaration(sourceLocation, name);
+        setDeclSpecifiers(fwd, declSpecifiers);
+        _scope->addMember(fwd);
+
+        *symbolTail = new (translationUnit()->memoryPool()) List<ObjCForwardClassDeclaration *>(fwd);
+        symbolTail = &(*symbolTail)->next;
     }
-    // unsigned semicolon_token = ast->semicolon_token;
-    // List<ObjCForwardClassDeclaration *> *symbols = ast->symbols;
+
     return false;
 }
 
-- 
GitLab