从Clang Match回调获取方法调用的参数

阿丹瑟姆

我适应锵工具模板(如描述这里)来搜索我的代码的特定方法调用。为了以后重写该调用,我想获取调用该方法的参数的类型,以及调用该方法的对象的类型。

我设法找到一个匹配项,该匹配项可以回调以下内容:

class AddListenerPrinter : public MatchFinder::MatchCallback
{
  public :
  virtual void run(const MatchFinder::MatchResult &Result) {
    if (const auto *FS = Result.Nodes.getNodeAs<clang::MemberExpr>("ListeningBound"))
    {
      FS->dump();
    }
  }
};

输出:

MemberExpr 0x7fb05b07b948 '<bound member function type>' .addListener 0x7fb05b077670
`-MemberExpr 0x7fb05b07b918 'class MyCore' lvalue ->mCore 0x7fb05b078e30
  `-CXXThisExpr 0x7fb05b07b900 'class MyComponent *' this

现在,我找不到任何方法来检索调用了该方法的对象的类型(在此处class MyCore)或方法参数的类型(在此class MyComponent)。

我怎样才能做到这一点?

阿丹瑟姆

我通过浏览现有匹配器的代码找到了答案。

使用 matcher = memberCallExpr( callee(methodDecl(hasName("addListener"))) )

我能够检索一个CXXMemberCallExpr节点。然后获取调用该方法的对象的类型:

// FS is the CXXMemberCallExpr
// Prints out the type of x in x.method()
llvm::outs() << FS->getRecordDecl()->getName();

可以通过访问方法参数FS->getArg(n)

底线是:首先找到包含您要查找的内容的CXX对象(例如,哪个类具有访问函数参数的方法?),然后在ASTMatchers.h中找到将返回相同类型对象的匹配器

希望这可以帮助其他有相同问题的人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从clang中的FunctionDecl类获取参数信息

来自分类Dev

模板模板参数和clang

来自分类Dev

clang格式:中断函数参数

来自分类Dev

获取Clang中变量的大小

来自分类Dev

Clang:如何将多个参数传递给 clang 插件

来自分类Dev

“制作”失败并显示Clang错误-如何从Clang中获取错误?

来自分类Dev

使用clang获取类中的方法列表

来自分类Dev

使用clang获取类中方法的列表

来自分类Dev

php从回调参数调用类方法

来自分类Dev

在回调方法中获取输入参数

来自分类Dev

在 Clang 中使“调用函数的参数过多”成为错误

来自分类Dev

如何在clang中获取wchar_t **参数?

来自分类Dev

多行函数声明参数的Clang格式问题

来自分类Dev

在clang命令行中覆盖参数

来自分类Dev

Clang和GCC误导模板参数

来自分类Dev

clang ++默认参数或配置文件

来自分类Dev

Android Studio:clang 错误:未知参数:'-mandroid'

来自分类Dev

如何获取Clang支持的标准列表?

来自分类Dev

是否可以从gcc或clang获取Lexer输出?

来自分类Dev

Clang OpenMP版本,无法获取最新

来自分类Dev

如何在Cygwin上获取Clang

来自分类Dev

如何获取Clang支持的标准列表?

来自分类Dev

与clang ++和scons链接的正确方法

来自分类Dev

Clang AST用于模板类的模板方法

来自分类Dev

如何使用clang python绑定获取类方法定义?

来自分类Dev

CLang 3.5 LibTooling:在clang :: VarDecl中获取变量的文件名

来自分类Dev

clang-query:检查函数参数类型的模板参数的名称

来自分类Dev

如何使用clang修复参数'args'缺少的默认参数?

来自分类Dev

为什么Clang在参数包错误中缺少默认参数?