[cfe-dev] Name lookup in ObjC methods
Chris Lattner
clattner at apple.com
Sun Mar 30 17:40:00 PDT 2008
On Mar 21, 2008, at 4:53 AM, Argiris Kirtzidis wrote:
> Chris Lattner wrote:
>>>> int foo::test2(q r) {
>>>> return X+r;
>>>> }
>>>>
>>> This is actually quite tricky, because clang currently assumes
>>> that a
>>> declaration can be "found"
>>> only by using an identifier (support for '::' in "foo::test2"
>>> needed),
>>> and for name lookup it
>>> assumes that the declaration is accessible at the current scope or
>>> at an
>>> enclosing scope of the
>>> current one (support for resolving X in "return X+r;" needed).
>>>
>>
>> It's not that bad, we already handle it for instance variables in
>> ObjC.
> Actually, name lookup in ObjC methods is not working correctly. For
> example:
You're right. I fixed the logic of this in this patch:
http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20080324/004865.html
Thanks a lot for noticing this!
> I'm not familiar with Objective C, but isn't it supposed to pick up
> the
> 'x' instance variable instead of the global one ?
Yes, absolutely.
There are two remaining issues listed in the patch, the first is an
internal objc implementation detail (making the AST more consistent
with the code by eliminating implicit 'self->'s).
The second is more interesting for your namespace patch. I think we
really do need an AST-side concept of "scope", which is similar to the
parser one, but is also a bit different. This would allow the
implementation of ScopedDecl::isDefinedOutsideFunctionOrMethod to
correctly handle typedefs defined inside functions etc.
I'll follow up after catching up on your namespace patch.
-Chris
More information about the cfe-dev
mailing list