libtooling相关内容

叮当声:将函数的AST从原始文件写入新文件

我是Clang的新手,他正尝试通过libtooling分析AST.我想找到一个特定的函数,并将其AST从原始源文件移动到新文件. 我知道如何通过MatchFinder查找功能.现在,我想知道如何将其AST写入新文件(.c或.cpp) 提前谢谢! 解决方案 摘要:要获取源文本,请使用 SourceManager ;要从原始文件中删除该功能,请生成一个 Replacement ,然 ..
发布时间:2021-04-22 18:43:04 其他开发

使用Clang的libtooling匹配#includes(或#defines)的正确方法是什么?

我正在编写一个libtooling重构工具。我有一个类,例如 Foo ,在一个名为 foo.h 的标头中定义。我想查看 foo.h 是否包含在文件中。目前,要检查 bar.cc 是否包含 foo.h ,我只是使用 recordDecl(hasName(“ Foo”))。之所以可以这样,是因为 class Foo {...}; 在预处理后将存在于 bar.cc 的AST中,如果 bar.cc 包括 ..
发布时间:2020-09-27 07:18:20 C/C++开发

lang:如何获取用于常量大小数组声明的大小的宏名称

TL; DR; 如何从callExpr-> arg_0-> DeclRefExpr中获取用于恒定大小数组声明的宏名称. 详细的问题说明: 最近,我开始应对一项挑战,该挑战需要使用源到源转换工具进行修改 带有附加参数的特定函数调用.对我可以达到的方法的研究介绍了我 这个惊人的工具集Clang.我一直在学习如何使用libtooling中提供的不同工具来 实现我的目标.但是现在我遇到了 ..

如何使用clang libtooling获取宏及其扩展?

我正在使用clang libtooling. 到目前为止,我已经设法通过visitDeclRefExpr(DeclRefExpr *DR) 在源文件中引用该宏. 但是我可以得到一个宏的列表,它的名称和扩展名是字符串. exampleprogram.c #define abc ab #define sum 0 int main() { int ab; abc = abc ..
发布时间:2020-05-02 11:04:34 C/C++开发

如何在clang中打印完全合格的Expr?

我正在使用clang 8.0.1开发反射工具.现在,我需要使用所有完全合格的名称打印Expr. 我已经尝试过将FullyQualifiedName位设置为true的内置prettyPrint函数.但是它仍然给出错误的结果. 对于这段代码: namespace math { struct Transform { float val; [[custom_at ..
发布时间:2020-05-02 11:03:37 C/C++开发