无论如何使用clang libtooling来切换函数?

时间:2016-07-14 08:32:58

标签: c++ clang llvm llvm-clang

编辑:

我和我的同事对clang和llvm都很陌生。

我有三个功能..

function 1{}
function 2{}
function 3{}

无论如何都要将功能交换到

function 3{}
function 2{}
function 1{}

使用clang libtooling / rewriter打印出函数名和函数内的参数?

1 个答案:

答案 0 :(得分:0)

您可以先使用ASTConsumer解析AST。您一次获得一个函数的AST,您可能希望将它存储在某个地方,然后您可以将它们添加到clang的REWRITTER API中,最后将缓冲区转储回文件。

This是编辑一些AST节点并写回文件的示例。在您的情况下,您不会编辑AST,但只需重新排列缓冲区推送调用以重新排列功能。 在VisitFunctionDecl中:

bool VisitFunctionDecl(FunctionDecl *f) {
    // Only function definitions (with bodies), not declarations.
    if (f->hasBody()) {
         //store in a global array/vector
    }

    return true;
}

在ParseAST之后和写入文件之前,您将执行rearrangeFunctionDecls。