[cfe-dev] AST oddities

Nikola Smiljanic popizdeh at gmail.com
Sun Aug 3 18:13:11 PDT 2014


Hi Peter, here's what I think after having a quick look at the code.

a) I don't think that there's a way to print enum constants in a
syntactically correct way. But I don't think anyone would object if you
extended PrintingPolicy to handle this. The comment for
getQualifiedNameAsString indicates that this method will be removed and you
should probably not use it, printQualifiedName will do what you want
especially if you decide to take the PrintingPolicy approach.

b) The linkage specifier seems to override the namespace, and this makes
sense to me. I mean namespace implies name mangling and C linkage doesn't
and you can't have both?

Nikola


On Sun, Aug 3, 2014 at 8: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.
>
>
>
> _______________________________________________
> 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/da2e22b5/attachment.html>


More information about the cfe-dev mailing list