[cfe-dev] Patch for IdentifierResolver

Argiris Kirtzidis akyrtzi at gmail.com
Wed Apr 9 16:35:06 PDT 2008


The previous patch had a bug, sorry about that.
Attached a new one..

Argiris Kirtzidis wrote:
> Chris Lattner wrote:
>> Steve and I were talking about this and came up with a potentially 
>> interesting refinement to your approach.  The observation we make is 
>> that shadowing of decls is actually really really rare in practice. 
>> It would be interesting to see stats, but I bet only a very small 
>> percentage of identifiers every have a scope chain with length > 1.
> Yes, this is true. For "carbon.h", for a total of 41358 identifiers, 
> only 1092 get a scope chain length > 1. That's just 2.64 %.
>> To take advantage of this, you could abuse the FETokenInfo a bit :), 
>> like we do in the 'Selector' class: if the field is null, it 
>> obviously doesn't point to anything.  If non-null and the low bit is 
>> clear, you could treat it as a pointer to a single unshadowed decl 
>> node.  If non-null with the low bit set, you could treat it as a 
>> pointer to the IdDeclInfo.
>>
>> This would keep the common case (no shadowing) extraordinarily cheap, 
>> while allowing graceful fallback when there is shadowing.  What do 
>> you think?
> Excellent idea! Try out the attached patch and let me know what you 
> think:
>
> -Added 'IdentifierResolver' class that handles the shadowed decls 
> identifier chains and performs name lookup.
> -Replaced get/setFETokenInfo calls from Sema with calls to 
> IdentifierResolver'methods:
>
>  /// AddDecl - Link the decl to its shadowed decl chain
>  void AddDecl(NamedDecl *D, Scope *S);
>
>  /// AddGlobalDecl - Link the decl at the top of the shadowed decl chain
>  void AddGlobalDecl(NamedDecl *D);
>
>  /// RemoveDecl - Unlink the decl from its shadowed decl chain
>  bool RemoveDecl(NamedDecl *D);
>
>  /// Lookup - Find the non-shadowed decl that belongs to a particular
>  /// Decl::IdentifierNamespace.
>  NamedDecl *Lookup(const IdentifierInfo *II, unsigned NSI);
>
>
> -Argiris
-------------- next part --------------
A non-text attachment was scrubbed...
Name: idresolver.patch
Type: text/x-diff
Size: 16786 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20080409/3faf0061/attachment.patch>


More information about the cfe-dev mailing list