From d21de8c621c4bdbc25fa662de58a77704953edba Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 13 Aug 2010 16:52:59 +0200
Subject: [PATCH] Fixed the objc auto tests

---
 src/shared/cplusplus/Bind.cpp                  | 12 +++++++++---
 tests/auto/cplusplus/lookup/tst_lookup.cpp     | 12 +++++++++---
 tests/auto/cplusplus/semantic/tst_semantic.cpp |  2 +-
 3 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp
index 436f68ebc19..9b5fe050eca 100644
--- a/src/shared/cplusplus/Bind.cpp
+++ b/src/shared/cplusplus/Bind.cpp
@@ -953,7 +953,6 @@ ObjCMethod *Bind::objCMethodPrototype(ObjCMethodPrototypeAST *ast)
     if (isObjCClassMethod(tokenKind(ast->method_type_token)))
         method->setStorage(Symbol::Static);
     method->setVisibility(_objcVisibility);
-    _scope->addMember(method);
     ast->symbol = method;
 
     Scope *previousScope = switchScope(method);
@@ -969,7 +968,7 @@ ObjCMethod *Bind::objCMethodPrototype(ObjCMethodPrototypeAST *ast)
     for (SpecifierListAST *it = ast->attribute_list; it; it = it->next) {
         specifiers = this->specifier(it->value, specifiers);
     }
-    setDeclSpecifiers(method, specifiers);
+    //setDeclSpecifiers(method, specifiers);
 
     return method;
 }
@@ -2285,10 +2284,17 @@ bool Bind::visit(ObjCMethodDeclarationAST *ast)
 {
     ObjCMethod *method = this->objCMethodPrototype(ast->method_prototype);
 
-    if (! _skipFunctionBodies && ast->function_body) {
+    if (! ast->function_body) {
+        const Name *name = method->name();
+        unsigned sourceLocation = ast->firstToken();
+        Declaration *decl = control()->newDeclaration(sourceLocation, name);
+        decl->setType(method);
+        _scope->addMember(decl);
+    } else if (! _skipFunctionBodies && ast->function_body) {
         Scope *previousScope = switchScope(method);
         this->statement(ast->function_body);
         (void) switchScope(previousScope);
+        _scope->addMember(method);
     }
 
     return false;
diff --git a/tests/auto/cplusplus/lookup/tst_lookup.cpp b/tests/auto/cplusplus/lookup/tst_lookup.cpp
index 1194600f18d..a05c610199d 100644
--- a/tests/auto/cplusplus/lookup/tst_lookup.cpp
+++ b/tests/auto/cplusplus/lookup/tst_lookup.cpp
@@ -334,19 +334,25 @@ void tst_Lookup::iface_impl_scoping()
     QCOMPARE(method1Impl->identifier()->chars(), "method1");
 
     // get the body of method1
-    QCOMPARE(method1Impl->memberCount(), 1U);
-    Block *method1Body = method1Impl->memberAt(0)->asBlock();
+    QCOMPARE(method1Impl->memberCount(), 2U);
+    Argument *method1Arg = method1Impl->memberAt(0)->asArgument();
+    QVERIFY(method1Arg);
+    QCOMPARE(method1Arg->identifier()->chars(), "arg");
+    QVERIFY(method1Arg->type()->isIntegerType());
+
+    Block *method1Body = method1Impl->memberAt(1)->asBlock();
     QVERIFY(method1Body);
 
     const LookupContext context(doc, snapshot);
 
     { // verify if we can resolve "arg" in the body
-        QCOMPARE(method1Impl->argumentCount(), 1U);
+        QCOMPARE(method1Impl->argumentCount(), 2U);
         Argument *arg = method1Impl->argumentAt(0)->asArgument();
         QVERIFY(arg);
         QVERIFY(arg->name());
         QVERIFY(arg->name()->identifier());
         QCOMPARE(arg->name()->identifier()->chars(), "arg");
+        QVERIFY(arg->type()->isIntegerType());
 
         const QList<LookupItem> candidates = context.lookup(arg->name(), method1Body->scope());
         QCOMPARE(candidates.size(), 1);
diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp
index 52541b168c8..b11f8ca6341 100644
--- a/tests/auto/cplusplus/semantic/tst_semantic.cpp
+++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp
@@ -565,7 +565,7 @@ void tst_Semantic::objcSelector_1()
 {
     QSharedPointer<Document> doc = document("\n"
                                             "@interface A {}\n"
-                                            "-(void)a:(int)a b:(int)b c:(int)c;\n"
+                                            "-(void) a:(int)a    b:(int)b c:(int)c;\n"
                                             "@end\n",
                                             true);
 
-- 
GitLab