<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi, everyone. <div><br></div><div>Is it possible to parse some code containing a typedef, then modify that typedef in the AST? For example, the input code contains `typedef int blah` and I want to change it to `typedef float blah`. </div><div><br></div><div>I found some <a href="http://eli.thegreenplace.net/2012/06/08/basic-source-to-source-transformation-with-clang/">example code for traversing the AST</a>, which I modified to visit each typedef declaration: </div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #cc00a2">bool</span> VisitDecl(Decl *d) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(226, 3, 0); "><span class="Apple-style-span" style="color: rgb(0, 0, 0); "><span class="Apple-tab-span" style="white-space:pre">                </span>d->dump();printf(<span style="color: #e20300">"\n"</span>);</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">              </span><span style="color: #cc00a2">if</span> (TypedefDecl::classof(d)) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                 </span>TypedefDecl *td = <span style="color: #cc00a2">static_cast</span><TypedefDecl *>(d);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                 </span>td->getTypeForDecl()->dump();  <span style="color: #008b00">// prints "NULL TYPE"</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span style="color: #008b00"><span class="Apple-tab-span" style="white-space:pre">                 </span>// Type *t = ???;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; "><span style="color: #008b00"><span class="Apple-tab-span" style="white-space:pre">                      </span>// td->setTypeForDecl(t); ???</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; color: rgb(0, 139, 0); "><span class="Apple-style-span" style="color: rgb(0, 0, 0); "><span class="Apple-tab-span" style="white-space:pre">              </span>}</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">        <span style="color: #cc00a2">return</span> <span style="color: #cc00a2">true</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; ">    }</div></div><div><br></div><div>But I wasn't sure where to go next. Any hints? </div><div><br><div>
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>---</div><div>Jaymie Strecker</div><div><a href="mailto:jstrecker@kosada.com">jstrecker@kosada.com</a></div><div><br></div></div></div></div></div></body></html>