[cfe-dev] Attempt 3 at CXX Namespaces

Chris Lattner clattner at apple.com
Wed Mar 19 22:39:07 PDT 2008


On Mar 14, 2008, at 4:05 PM, Kevin Tew wrote:

> I'm puzzled at how to go about adding child decls too a namespace.

Ok.

> I've picked up, that the parser shouldn't use AST types and only  
> make Actions.ActOn... calls.

Yep!

> Currently I'm thinking something like this:
>
> llvm::SmallVector<DeclTy*, 16>  NamespaceChildren;
> while (Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {
> NamespaceChildren.push_back(ParseExternalDeclaration());
> }
> Actions.ActOnNamespaceMembers(&NamespaceChildren[0],  
> NamespaceChildren.size());
>
> or something like this:
>
> while (Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {
> Actions.ActOnNamespaceMember(ParseExternalDeclaration());
> }
>
> Am I on the right track?

I'd suggest calling one action when a namespace is started and one  
when finished (like you have).  The former create a Namespacedecl  
object and push it as the current context.  All decls parsed after  
that (and actions fired as a result of them) would cause the decls to  
get added to the current context (the namespace). When the namespace  
is closed, the current context is finished and removed.

This is somewhat like scope processing.  Does this make sense?

-Chris




More information about the cfe-dev mailing list