<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Aug 4, 2014 at 2:39 PM, Manuel Klimek <span dir="ltr"><<a href="mailto:klimek@google.com" target="_blank">klimek@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">
<div><div class="h5">On Sun, Aug 3, 2014 at 12:13 AM, Peter Stirling <span dir="ltr"><<a href="mailto:peter@pjstirling.plus.com" target="_blank">peter@pjstirling.plus.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi,<br>
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.<br>


<br>
clang::NamedDecl::<u></u>getQualifiedNameAsString() sounds like it should be what I want, but I'm having a couple of problems with it so far:<br>
<br>
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.<br>


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?<br>


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

</blockquote><div><br></div></div></div><div>You can implement your own Traverse* methods that prune the traversal...</div></div></div></div></blockquote><div><br></div><div>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:</div>
<div><a href="http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-June/009273.html">http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-June/009273.html</a><br></div><div><br></div><div>- Kim</div></div></div></div>