Commit 5723682b authored by Erik Verbruggen's avatar Erik Verbruggen

Fixes for highlighting locals in Objective-C methods.

parent 7c0f4e8f
......@@ -155,6 +155,9 @@ private:
virtual bool visit(Function *function)
{ return processScope(function->members()); }
virtual bool visit(ObjCMethod *method)
{ return processScope(method->members()); }
bool processScope(Scope *scope)
{
if (_scope || ! scope)
......@@ -258,9 +261,15 @@ protected:
}
virtual bool visit(SimpleNameAST *ast)
{ return findMemberForToken(ast->firstToken(), ast); }
virtual bool visit(ObjCMessageArgumentDeclarationAST *ast)
{ return findMemberForToken(ast->param_name_token, ast); }
bool findMemberForToken(unsigned tokenIdx, NameAST *ast)
{
unsigned line, column;
getTokenStartPosition(ast->firstToken(), &line, &column);
getTokenStartPosition(tokenIdx, &line, &column);
Scope *scope = findScope(line, column,
_functionScope->owner(),
......@@ -273,6 +282,12 @@ protected:
return false;
else if (findMember(fun->arguments(), ast, line, column))
return false;
} else if (scope->isObjCMethodScope()) {
ObjCMethod *method = scope->owner()->asObjCMethod();
if (findMember(method->members(), ast, line, column))
return false;
else if (findMember(method->arguments(), ast, line, column))
return false;
} else if (scope->isBlockScope()) {
if (findMember(scope, ast, line, column))
return false;
......@@ -395,6 +410,12 @@ protected:
return false;
}
virtual bool visit(ObjCMethodPrototypeAST *ast)
{
accept(ast->argument_list);
return false;
}
};
......
......@@ -187,6 +187,14 @@ bool Scope::isFunctionScope() const
return false;
}
bool Scope::isObjCMethodScope() const
{
ObjCMethod *m = 0;
if (_owner && 0 != (m = _owner->asObjCMethod()))
return m->arguments() != this;
return false;
}
void Scope::enterSymbol(Symbol *symbol)
{
if (++_symbolCount == _allocatedSymbols) {
......
......@@ -114,6 +114,9 @@ public:
/// Returns true if this scope's owner is an ObjCClass Symbol.
bool isObjCClassScope() const;
/// Returns true if this scope's owner is an ObjCMethod symbol.
bool isObjCMethodScope() const;
/// Adds a Symbol to this Scope.
void enterSymbol(Symbol *symbol);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment