forked from qt-creator/qt-creator
Fixed the objc auto tests
This commit is contained in:
@@ -953,7 +953,6 @@ ObjCMethod *Bind::objCMethodPrototype(ObjCMethodPrototypeAST *ast)
|
|||||||
if (isObjCClassMethod(tokenKind(ast->method_type_token)))
|
if (isObjCClassMethod(tokenKind(ast->method_type_token)))
|
||||||
method->setStorage(Symbol::Static);
|
method->setStorage(Symbol::Static);
|
||||||
method->setVisibility(_objcVisibility);
|
method->setVisibility(_objcVisibility);
|
||||||
_scope->addMember(method);
|
|
||||||
ast->symbol = method;
|
ast->symbol = method;
|
||||||
|
|
||||||
Scope *previousScope = switchScope(method);
|
Scope *previousScope = switchScope(method);
|
||||||
@@ -969,7 +968,7 @@ ObjCMethod *Bind::objCMethodPrototype(ObjCMethodPrototypeAST *ast)
|
|||||||
for (SpecifierListAST *it = ast->attribute_list; it; it = it->next) {
|
for (SpecifierListAST *it = ast->attribute_list; it; it = it->next) {
|
||||||
specifiers = this->specifier(it->value, specifiers);
|
specifiers = this->specifier(it->value, specifiers);
|
||||||
}
|
}
|
||||||
setDeclSpecifiers(method, specifiers);
|
//setDeclSpecifiers(method, specifiers);
|
||||||
|
|
||||||
return method;
|
return method;
|
||||||
}
|
}
|
||||||
@@ -2285,10 +2284,17 @@ bool Bind::visit(ObjCMethodDeclarationAST *ast)
|
|||||||
{
|
{
|
||||||
ObjCMethod *method = this->objCMethodPrototype(ast->method_prototype);
|
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);
|
Scope *previousScope = switchScope(method);
|
||||||
this->statement(ast->function_body);
|
this->statement(ast->function_body);
|
||||||
(void) switchScope(previousScope);
|
(void) switchScope(previousScope);
|
||||||
|
_scope->addMember(method);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@@ -334,19 +334,25 @@ void tst_Lookup::iface_impl_scoping()
|
|||||||
QCOMPARE(method1Impl->identifier()->chars(), "method1");
|
QCOMPARE(method1Impl->identifier()->chars(), "method1");
|
||||||
|
|
||||||
// get the body of method1
|
// get the body of method1
|
||||||
QCOMPARE(method1Impl->memberCount(), 1U);
|
QCOMPARE(method1Impl->memberCount(), 2U);
|
||||||
Block *method1Body = method1Impl->memberAt(0)->asBlock();
|
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);
|
QVERIFY(method1Body);
|
||||||
|
|
||||||
const LookupContext context(doc, snapshot);
|
const LookupContext context(doc, snapshot);
|
||||||
|
|
||||||
{ // verify if we can resolve "arg" in the body
|
{ // verify if we can resolve "arg" in the body
|
||||||
QCOMPARE(method1Impl->argumentCount(), 1U);
|
QCOMPARE(method1Impl->argumentCount(), 2U);
|
||||||
Argument *arg = method1Impl->argumentAt(0)->asArgument();
|
Argument *arg = method1Impl->argumentAt(0)->asArgument();
|
||||||
QVERIFY(arg);
|
QVERIFY(arg);
|
||||||
QVERIFY(arg->name());
|
QVERIFY(arg->name());
|
||||||
QVERIFY(arg->name()->identifier());
|
QVERIFY(arg->name()->identifier());
|
||||||
QCOMPARE(arg->name()->identifier()->chars(), "arg");
|
QCOMPARE(arg->name()->identifier()->chars(), "arg");
|
||||||
|
QVERIFY(arg->type()->isIntegerType());
|
||||||
|
|
||||||
const QList<LookupItem> candidates = context.lookup(arg->name(), method1Body->scope());
|
const QList<LookupItem> candidates = context.lookup(arg->name(), method1Body->scope());
|
||||||
QCOMPARE(candidates.size(), 1);
|
QCOMPARE(candidates.size(), 1);
|
||||||
|
Reference in New Issue
Block a user