<div dir="ltr">You can overwrite the Traverse* methods in RecursiveASTVisitor like the ASTMatchFinder does.</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 15, 2016 at 8:49 AM Hemant Bhagat via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-IN" link="#0563C1" vlink="#954F72" class="gmail_msg">
<div class="m_5428037325855287367WordSection1 gmail_msg">
<p class="MsoNormal gmail_msg">Hi,<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg"><u class="gmail_msg"></u> <u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">I have just started experimenting with clang AST and libTooling.<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">My project requirement is to generate a json from an AST using libTooling.<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">For that I need to track the end of every visit.<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg"><u class="gmail_msg"></u> <u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">For example.<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg"><u class="gmail_msg"></u> <u class="gmail_msg"></u></p>
<table class="m_5428037325855287367MsoTableGrid gmail_msg" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody class="gmail_msg">
<tr class="gmail_msg">
<td width="623" valign="top" style="width:467.5pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt" class="gmail_msg">
<p class="MsoNormal gmail_msg">int main()<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">{<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">              Int x = 10;<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">              return 0;<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">}<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal gmail_msg"><u class="gmail_msg"></u> <u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">Corresponding json looks like (not the exact format)<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<table class="m_5428037325855287367MsoTableGrid gmail_msg" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody class="gmail_msg">
<tr class="gmail_msg">
<td width="623" valign="top" style="width:467.5pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt" class="gmail_msg">
<p class="MsoNormal gmail_msg">{<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">              TranslationUnit<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">              {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                             Function <main><u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                            {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                                          Return Type <int><u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                                          End Return Type<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                                          Block Stmt "{"<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                                          Variable Declaration x<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                                          End Variable Declaration<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                                          Return Stmt 0<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                                          End Return Stmt<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                                          <b class="gmail_msg">
<span style="color:red" class="gmail_msg">End Block Stmt</span><u class="gmail_msg"></u><u class="gmail_msg"></u></b></p>
<p class="MsoNormal gmail_msg">                                           }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                             }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                             {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">                                           <b class="gmail_msg"><span style="color:red" class="gmail_msg">End Function</span><u class="gmail_msg"></u><u class="gmail_msg"></u></b></p>
<p class="MsoNormal gmail_msg">                             }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">   }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">   {<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg"><b class="gmail_msg">             <span style="color:red" class="gmail_msg">End TranslationUnit</span><u class="gmail_msg"></u><u class="gmail_msg"></u></b></p>
<p class="MsoNormal gmail_msg">   }<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">}<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal gmail_msg"><u class="gmail_msg"></u> <u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">In the above code, I will create a json node for every token visit recursively from AST. (see example json above)<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">Question: How will I get the know that the function has reached the end while visiting nodes. (highlighted in bold red)<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">OR is there any way to control the AST visitors as If we visit the children of function then all the children get visited twice.<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg"><u class="gmail_msg"></u> <u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">Any kind of help is really very appreciated as it is very important.<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg"><u class="gmail_msg"></u> <u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">Thanks,<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
<p class="MsoNormal gmail_msg">Hemant<u class="gmail_msg"></u><u class="gmail_msg"></u></p>
</div>
<div style="font-size:9pt" class="gmail_msg"><font face="Calibri" color="gray" class="gmail_msg">DISCLAIMER :- This e-mail may contain privileged and confidential information which is the property of Acellere GmbH and its associated companies. It is intended only for the use of the individual
 or entity to whom it is addressed. If you are not the intended recipient, you are not authorized to read, retain, copy, print, distribute or use this message. If you have received this communication in error, please notify the sender and delete all copies
 of this message. Acellere GmbH and its associated companies does not accept any liability for virus infected mails.</font></div>
</div>

_______________________________________________<br class="gmail_msg">
cfe-dev mailing list<br class="gmail_msg">
<a href="mailto:cfe-dev@lists.llvm.org" class="gmail_msg" target="_blank">cfe-dev@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br class="gmail_msg">
</blockquote></div>