<div dir="ltr">Hi Douglas,<div><br></div><div>Thanks! I have found a way to do it. I posted my code here, in case someone may have the same situation.</div><div><br></div><div>void revise(FunctionDecl* D)</div><div>{</div>
<div>...</div><div>//store all the types of parameters to ParamTypes</div><div><br></div><div><div>FunctionProtoType::ExtProtoInfo fpi;</div><div>fpi.Variadic = D->isVariadic();</div><div><br></div><div> QualType newFT = D->getASTContext().getFunctionType(D->getResultType(), ParamTypes.data(), ParamTypes.size(), fpi);</div>
<div> D->setType(newFT);</div><div><br></div><div>}</div><br><div class="gmail_quote">On 18 May 2011 17:04, Douglas Gregor <span dir="ltr"><<a href="mailto:dgregor@apple.com">dgregor@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im"><br>
On May 18, 2011, at 6:36 AM, Zheng Wang wrote:<br>
<br>
> Hi,<br>
><br>
> I want to revise the prototype of a FunctionDecl object. Is there any example in Clang that I can have a look?<br>
<br>
</div>No. Clang avoids mutating its ASTs in this way, since doing so is likely to break invariants in the AST.<br>
<div class="im"><br>
> For example,<br>
><br>
> the original prototype of a FunctionDecl object is:<br>
><br>
> (int, int, double*)<br>
><br>
> and I want to change it to:<br>
><br>
> (int, int, long, long, double*)<br>
><br>
><br>
> I have managed to change the parameters of the FunctionDecl and I am not sure how to revise the prototype.<br>
<br>
</div>You would have to update both the function's type and the TypeSourceInfo that describes the type as it was written in the source.<br>
<br>
        - Doug<br>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>Best regards,<br><br>WANG Zheng<br>
</div></div>