[cfe-dev] Templates (again)

Douglas Gregor dgregor at apple.com
Fri Dec 26 07:25:42 PST 2008


On Dec 24, 2008, at 11:45 AM, Andrew Sutton wrote:

> This is in the tree now. Basically, we keep track of the template  
> parameter lists that we've parsed and then provide those to the  
> various Action routines that will end up constructing templates,  
> e.g., ActOnTag for creating class templates (but not enum templates  
> <g>).
>
> The Depth/Position stuff is working toward a fix in the type system.  
> Basically, template parameters in the type system will be identified  
> by their kind, depth (= the number of enclosing template parameter  
> lists), and position with in that template parameter list. For  
> example, 'T' in
>
>
>        template<typename T> void foo(T);
>
> is a template type parameter with depth=0 and position=0. That's the  
> canonical type for 'T', and we'll use some sugar to give it the name  
> 'T'. That way, we can quickly match the declaration above with the  
> definition below
>
>        template<class U> void foo(U) { }
>
>        - Doug
>
> I just merged my patches onto yours and started stubbing out some  
> declaration classes. I also broke the template node declarations out  
> into DeclTemplates.h/cpp so I could navigate around a little easier.  
> It's included at the bottom of DeclCXX for now. The new code doesn't  
> really *do* anything yet.

Splitting the code out into DeclTemplate.h/.cpp makes a lot of sense.  
For the most part, clients of a completed AST won't need to deal with  
the AST nodes in DeclTemplate.h.

> Also, I'm not entirely sure how to use TemplateParameterList. It's  
> not quite like any "list/array/vector" structure that I've run  
> across. I'm guessing that I'd have TemplateDecl contain a ptr to it,  
> since the list is likely created and populated during parsing.

Right. ActOnTemplateParameterList creates them, and they'll go into  
ActOnTag, ActOnDeclarator, etc., where they'll get hooked into a  
TemplateDecl.

>
> I merged the changes into Dan (Christiansen's) Mercurial mirror on  
> BitBucket, here:
>
> http://bitbucket.org/danchr/clang/
>
> It's just a start, an offering for comments. More code to follow,  
> but probably not today or tomorrow.

Aside from the move to DeclTemplate.h/.cpp, I'm having a hard time  
determining what else has changed here. Is there something specific I  
can look at?

   - Doug
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20081226/90c9bf3f/attachment.html>


More information about the cfe-dev mailing list