[cfe-dev] AST oddities

Kim Gräsman kim.grasman at gmail.com
Mon Aug 4 08:59:28 PDT 2014

On Mon, Aug 4, 2014 at 2:39 PM, Manuel Klimek <klimek at google.com> wrote:

> On Sun, Aug 3, 2014 at 12:13 AM, Peter Stirling <peter at pjstirling.plus.com
> > wrote:
>> Hi,
>> I've got plans to write a clang tool to automatically generate universal
>> foreign function interface definitions, to allow usage of c++ libraries
>> from non-c++ languages. As part of that I need to pull out correct function
>> and type names from the AST to go into a new .cc file.
>> clang::NamedDecl::getQualifiedNameAsString() sounds like it should be
>> what I want, but I'm having a couple of problems with it so far:
>> a) for EnumConstantDecl it returns a name including the name of the
>> EnumDecl (which is arguably correct, but is invalid in c++ code). I think
>> it would be better if there was a second method that produced the
>> syntactically correct version.
>> b) the attached file is a cut-down example from the system headers on my
>> machine (gcc-4.8.3 if it matters). When you call getQualifiedNameAsString()
>> on the __uselocale function declaration (I was surprised to learn that it
>> WAS a function declaration), clang returns "__uselocale" and not
>> "__gnu_cxx::__uselocale". Is this a bug, or some misunderstanding on my
>> part?
>> I've been using the RecursiveASTVisitor to do the tree walking, and can I
>> ask whether there is some convenient way to prune a node's children,
>> without aborting the whole traversal? For example: I want to visit
>> CXXRecordDecl, but not the ones inside function bodies. At the moment I am
>> walking up the parent DeclContext chain, which (to me) seems less than
>> ideal.
> You can implement your own Traverse* methods that prune the traversal...

I ran into this e-mail a while ago when trying to get my head around the
Traverse/WalkUpFrom/Visit design of RecursiveASTVisitor, and I found it a
really good intro:

- Kim
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140804/e0f54fd7/attachment.html>

More information about the cfe-dev mailing list