[cfe-dev] Proposal to simplify ObjC Type AST's

Ted Kremenek kremenek at apple.com
Tue May 19 10:24:04 PDT 2009


On May 19, 2009, at 10:04 AM, steve naroff wrote:

> class ObjCObjectPointerType : public Type, public  
> llvm::FoldingSetNode {
>
>   // We could used the lower order bits to encode id/Class (which  
> are built-in, not user-defined).
>   // Alternatively, we could synthesize built-in ObjCInterfaceDecl's  
> that correspond to id/Class.
>   ObjCInterfaceDecl *Decl;
>
>   // List of protocols, sorted on protocol name. No protocol is  
> entered more than once.
>   llvm::SmallVector<ObjCProtocolDecl*, 8> Protocols;
>
> public:
>   bool isObjCIdType();
>   bool isObjCInterfaceType();
>   bool isObjCQualifiedIdType();
>   bool isObjCQualifiedInterfaceType();
>   ...
> };
>
> The following classes would be deprecated: ObjCQualifiedIdType,  
> ObjCQualifiedInterfaceType. ObjCInterfaceType will still exist,  
> however it's usage will be minimal (since you can't declare a  
> variable/field of ObjCInterfaceType). You can, however specify an  
> ObjCInterfaceType as an argument to @encode(Interface).
>


Hi Steve,

I personally like the idea of keeping these classes around and having  
them subclass ObjCObjectPointerType.  This allows one to use cast<>  
when querying for a specific Objective-C object reference.  This  
allows clients that care about the differences between these  
references to access this information using static typing.

It also seems to me that specific object references may need  
information that isn't necessary for the others, (e.g., having the  
'Protocols' field).  Collapsing all object references into a single  
class that contains the information for all of them seems somewhat  
retrograde to me and a little inefficient.  We also don't know what  
new kind of object reference types may come down the line in future  
revisions of the language, so keeping the modularity (with a common  
ancestor class) seems cleaner to me.

One thing that isn't clear in this proposal is how the implicit  
typedef definition for 'id' will work.  Will 'id x' resolve to a  
declaration for 'x' that has an ObjCObjectPointerType?  What is the  
type of 'id' when we aren't compiling for Objective-C?  (i.e., is it a  
pointer to a struct, as it is right now).

Ted
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20090519/d210cb00/attachment.html>


More information about the cfe-dev mailing list