gpt4 book ai didi

clang - 从 clang 匹配回调中获取方法调用的参数

转载 作者:行者123 更新时间:2023-12-04 19:07:00 28 4
gpt4 key购买 nike

我正在调整 Clang 工具模板(如 here 所述)以在我的代码中搜索特定的方法调用。为了稍后重写该调用,我想获取调用该方法的参数的类型,以及调用该方法的对象的类型。

我设法找到了一个可以回调以下内容的匹配器:

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 中找到将返回相同类型对象的匹配器。

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

关于clang - 从 clang 匹配回调中获取方法调用的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887759/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com