<div dir="ltr">In general clang produces ast only for valid code. I don't think you'll be able to get this working if your starting point is code that doesn't compile. In the example you gave you might be able to get away with it so long as you don't compile the instantiation of B<A> as that's what produces the error. But this essentially means having code that compiles...<div><br></div><div>The only other thing that comes to my mind is having multiple passes in the hope that each insertion you perform removes errors and allows you to continue. I have no idea how feasible this would be.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 10, 2015 at 11:15 AM, chaitanya vadrevu <span dir="ltr"><<a href="mailto:chaitanya973@gmail.com" target="_blank">chaitanya973@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><span style="font-size:12.8000001907349px">Hi All,</span></div><div><span style="font-size:12.8000001907349px"><br></span></div><span style="font-size:12.8000001907349px">I developed a clang plugin which uses AST matchers to find interesting record declarations and automatically inserts a function (lets say newfn()) along with some boiler plate code.</span><div style="font-size:12.8000001907349px"><br><span style="font-size:12.8000001907349px">//original code</span><br></div><div style="font-size:12.8000001907349px">class A{</div><div style="font-size:12.8000001907349px">....</div><div style="font-size:12.8000001907349px">};</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">//modified code after plugin is run</div><div style="font-size:12.8000001907349px">class A{</div><div style="font-size:12.8000001907349px">  void newfn() {...<span style="font-size:12.8000001907349px">}</span></div><div style="font-size:12.8000001907349px">};</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">This works fine as long as there are no compile errors. But there are cases when the absence of the</div><div style="font-size:12.8000001907349px">function is causing the compilation to fail. E.g., the following code which expects class A to contain the function.</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">template<typename T></div><div style="font-size:12.8000001907349px">class B{</div><div style="font-size:12.8000001907349px">  T t;</div><div style="font-size:12.8000001907349px">  B() {</div><div style="font-size:12.8000001907349px">    t.newfn();</div><div style="font-size:12.8000001907349px">  }</div><div style="font-size:12.8000001907349px">};</div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Due to the compilation errors, my plugin is not executed.</span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">So the compilation wont proceed unless the function is already present and the function can't be added unless compilation succeeds.</span><br></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div><div style="font-size:12.8000001907349px">Is there a way to solve this?</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">Thanks,</div><div style="font-size:12.8000001907349px">Chaitanya</div></div>
<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>