如何使用Clang AST在功能块的开头插入语句?

发布于 2025-02-04 10:36:31 字数 1090 浏览 3 评论 0原文

我正在用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文