<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-IN" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have just started experimenting with clang AST and libTooling.<o:p></o:p></p>
<p class="MsoNormal">My project requirement is to generate a json from an AST using libTooling.<o:p></o:p></p>
<p class="MsoNormal">For that I need to track the end of every visit.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For example.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="623" valign="top" style="width:467.5pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoNormal">int main()<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">              Int x = 10;<o:p></o:p></p>
<p class="MsoNormal">              return 0;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Corresponding json looks like (not the exact format)<o:p></o:p></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="623" valign="top" style="width:467.5pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">              TranslationUnit<o:p></o:p></p>
<p class="MsoNormal">              {<o:p></o:p></p>
<p class="MsoNormal">                             Function <main><o:p></o:p></p>
<p class="MsoNormal">                            {<o:p></o:p></p>
<p class="MsoNormal">                                           {<o:p></o:p></p>
<p class="MsoNormal">                                                          Return Type <int><o:p></o:p></p>
<p class="MsoNormal">                                           }<o:p></o:p></p>
<p class="MsoNormal">                                           {<o:p></o:p></p>
<p class="MsoNormal">                                                          End Return Type<o:p></o:p></p>
<p class="MsoNormal">                                           }<o:p></o:p></p>
<p class="MsoNormal">                                           {<o:p></o:p></p>
<p class="MsoNormal">                                                          Block Stmt "{"<o:p></o:p></p>
<p class="MsoNormal">                                           }<o:p></o:p></p>
<p class="MsoNormal">                                           {<o:p></o:p></p>
<p class="MsoNormal">                                                          Variable Declaration x<o:p></o:p></p>
<p class="MsoNormal">                                           }<o:p></o:p></p>
<p class="MsoNormal">                                           {<o:p></o:p></p>
<p class="MsoNormal">                                                          End Variable Declaration<o:p></o:p></p>
<p class="MsoNormal">                                           }<o:p></o:p></p>
<p class="MsoNormal">                                           {<o:p></o:p></p>
<p class="MsoNormal">                                                          Return Stmt 0<o:p></o:p></p>
<p class="MsoNormal">                                           }<o:p></o:p></p>
<p class="MsoNormal">                                           {<o:p></o:p></p>
<p class="MsoNormal">                                                          End Return Stmt<o:p></o:p></p>
<p class="MsoNormal">                                           }<o:p></o:p></p>
<p class="MsoNormal">                                           {<o:p></o:p></p>
<p class="MsoNormal">                                                          <b>
<span style="color:red">End Block Stmt</span><o:p></o:p></b></p>
<p class="MsoNormal">                                           }<o:p></o:p></p>
<p class="MsoNormal">                             }<o:p></o:p></p>
<p class="MsoNormal">                             {<o:p></o:p></p>
<p class="MsoNormal">                                           <b><span style="color:red">End Function</span><o:p></o:p></b></p>
<p class="MsoNormal">                             }<o:p></o:p></p>
<p class="MsoNormal">   }<o:p></o:p></p>
<p class="MsoNormal">   {<o:p></o:p></p>
<p class="MsoNormal"><b>             <span style="color:red">End TranslationUnit</span><o:p></o:p></b></p>
<p class="MsoNormal">   }<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In the above code, I will create a json node for every token visit recursively from AST. (see example json above)<o:p></o:p></p>
<p class="MsoNormal">Question: How will I get the know that the function has reached the end while visiting nodes. (highlighted in bold red)<o:p></o:p></p>
<p class="MsoNormal">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.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any kind of help is really very appreciated as it is very important.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Hemant<o:p></o:p></p>
</div>
<div style="font-size:9pt"><font face="Calibri" color="gray">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>
</body>
</html>