【发布时间】:2017-11-11 01:28:10
【问题描述】:
我想知道如何使用 libclang 将参数插入到函数调用中?我必须遵循只打印参数的代码:
class CASTVisitor : public RecursiveASTVisitor<CASTVisitor>
{
public:
CASTVisitor(Rewriter &R) : rewriter(R)
{
}
virtual bool VisitCallExpr(CallExpr *call)
{
for(int i = 0, j = call->getNumArgs(); i < j; ++ i)
{
errs() << "argType: " << call->getArg(i)->getType().getAsString() << "\n";
}
errs() << "** Added parameter to function call\n";
return true;
}
...
};
编辑:
虽然我可以读取和设置参数,但我看不到任何方法可以在 parmVarDcl() 匹配器的开头插入一个。
将成员变量添加到基类和复合语句中也是如此。您似乎可以更改现有文本,但不能轻松插入新对象。我说的对吗?
【问题讨论】:
-
另外:“Clang 并非旨在支持其 AST 的突变”:stackoverflow.com/a/10763844/7392560 我认为在函数调用中添加一个简单的参数会比我预期的要复杂。