[cfe-dev] AST oddities

Manuel Klimek klimek at google.com
Mon Aug 4 05:39:03 PDT 2014


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...


>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140804/c28924b4/attachment.html>


More information about the cfe-dev mailing list