我有看起来像这样的源代码,
void update();
void update()
{
}
我正在尝试使用 clang 解析此代码并将代码修改为此。
typedef float v4sf attribute ((vector_size(16)));
void update(v4sf& v1, v4sf& v2);
void update(v4sf& v1, v4sf& v2)
{
}
我查看了 Clang 的 Rewriter 类。在我编写的函数中,如下所示,
MyRecursiveASTVisitor::VisitFunctionDecl(FunctionDecl *f)
FunctionDecl 有我可以使用的 setParams() 方法。我将不得不使用这种方法创建参数。
static ParmVarDecl *Create(ASTContext &C, DeclContext *DC,
SourceLocation StartLoc,
SourceLocation IdLoc, IdentifierInfo *Id,
QualType T, TypeSourceInfo *TInfo,
StorageClass S, StorageClass SCAsWritten,
Expr *DefArg);
create 函数的前四个参数可以从 FunctionDecl 获得。我不确定其余的必须是什么。
如何在 clang 中创建类型并为它们分配值?这些类型不需要内置,可以与转换后的源代码中添加的类型(v4sf)类似。
是这种方式(使用 clang 方法)进行转换还是我可以使用 Rewriter.InsertText() 添加参数?