用铿锵的函数创建参数(Creating parameters for a function with

2019-09-17 12:15发布

我的源代码看起来像这样,

void update();

void update()
{
}

荫试图解析此代码铛和修改代码来此。

typedef float v4sf attribute ((vector_size(16)));
void update(v4sf& v1, v4sf& v2);

void update(v4sf& v1, v4sf& v2)
{
}

我看着铛的重写类。 其中我写如下所示的功能,

MyRecursiveASTVisitor::VisitFunctionDecl(FunctionDecl *f) 

FunctionDecl具有setParams()获取方法,该方法我可以使用。 我会使用这方法PARAMS。

  static ParmVarDecl *Create(ASTContext &C, DeclContext *DC,
                             SourceLocation StartLoc,
                             SourceLocation IdLoc, IdentifierInfo *Id,
                             QualType T, TypeSourceInfo *TInfo,
                             StorageClass S, StorageClass SCAsWritten,
                             Expr *DefArg);

前四个参数的创建函数可以从FunctionDecl获得。 我不知道他们的其余部分必须是。

如何创建类型和也铛给它们赋值? 类型不必是内置并且可以是等在转化的源代码中的一个加入(v4sf)。

就是这个样子(使用铛方法)做变换或者我可以使用Rewriter.InsertText()添加参数?

Answer 1:

锵并非设计用于支持其AST的突变,并且它不支持再出口的AST作为源代码(保留意见,宏和预处理指令)。 添加AST节点手工很可能违反了AST不变,这可能会导致崩溃。 您应该使用Rewriter来执行源代码的重写,根据您从AST中提取信息。

如果你仍然要执行AST的修改,应该通过重建要修改,而不是在地方改变它的AST的一部分这样做。 重建步骤应该通过调用方法进行Sema ,它知道如何构建AST时提供相应的变量。



文章来源: Creating parameters for a function with clang
标签: llvm clang