[cfe-dev] Objective-C tidy up

Chris Lattner clattner at apple.com
Wed Jun 4 10:11:29 PDT 2008


On Jun 4, 2008, at 4:30 AM, David Chisnall wrote:

> On 3 Jun 2008, at 18:27, Chris Lattner wrote:
>
>> I fail to see the point.  "this" in C++ has the exact same behavior  
>> and should also be modeled with PredefinedExpr.
>
> There is one important difference with this.  In C++, this is a  
> keyword, so the following is an invalid C++ program:
>
> int main(void)
> {
>    int this = 0;
>    return this;
> }
>
> In contrast, the following is a valid Objective-C program:
>
> int main(void)
> {
>    int self = 0;
>    return self;
> }

Ahhh, excellent point.  Okay, you successfully convinced me that these  
should be decls, otherwise they can't participate in name lookup.

> Any function in Objective-C can use self and _cmd as identifier  
> names.  Any occurrence of the 'this' token in a C++ program refers  
> to an instance of an object with a type defined by the context.

Does 'super' in ObjC work the same way?

> So, the question is not what should occurrences of the self and _cmd  
> tokens be turned into (although that might be a separate question),  
> it's what the entries in the decl map should be populated with.  As  
> far as my code goes, this can be pretty much any sort of decl.  It  
> needs to have a type associated with it for Sema to be able to be  
> able to do type checking (for self, this is a pointer to an instance  
> of the current class, e.g. NSObject*, for _cmd it is SEL).  For  
> CodeGen, it needs to have a name.

Gotcha.  What do you think of a new subclass of ValueDecl?

It would be really nice to lazily allocate these objects when they are  
first used.  This would allow us to avoid allocating the _cmd decl for  
almost every ObjC method, and avoid 'self' on many of them.

Thanks for being patient with me David!

-Chris



More information about the cfe-dev mailing list