如何使用Clang AST在功能块的开头插入语句?
我正在用clang编写源头变压器的源。我想在函数中插入每个参数的一个标志变量。因此,如果我的原始来源如下:
int f(int x, int y)
{
// do something ...
return 0;
}
我想将其转换为:
int f(int x, int y)
{
bool __flag_x = true;
bool __flag_y = true;
// do something ...
return 0
}
相反,我得到了:
int f(int x, int y)
bool __flag_x = true;
bool __flag_y = true;
{
// do something ...
return 0
}
问题是,它正在插入左卷发括号之前的参数。
如何在支架后插入它?
这是我的AST Matcher/Rewriter:
bool VisitFunctionDecl(FunctionDecl *func) {
for (unsigned int i = 0; i < func->getNumParams(); i++) {
std::string varString = func->parameters()[i]->getQualifiedNameAsString();
TheRewriter.InsertText(func->getBody()->getBeginLoc(),
"bool __flag_" + varString + " = true;\n");
}
return true;
}
I am writing a source to source transformer using clang. I want to insert one flag variable for each parameter in a function. So if my original source is like below:
int f(int x, int y)
{
// do something ...
return 0;
}
I want to transform it to:
int f(int x, int y)
{
bool __flag_x = true;
bool __flag_y = true;
// do something ...
return 0
}
Instead I am getting:
int f(int x, int y)
bool __flag_x = true;
bool __flag_y = true;
{
// do something ...
return 0
}
The problem is, it is inserting the params before the left curly braces.
How do I insert it just after the brace?
Here is my AST matcher/rewriter:
bool VisitFunctionDecl(FunctionDecl *func) {
for (unsigned int i = 0; i < func->getNumParams(); i++) {
std::string varString = func->parameters()[i]->getQualifiedNameAsString();
TheRewriter.InsertText(func->getBody()->getBeginLoc(),
"bool __flag_" + varString + " = true;\n");
}
return true;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论