我有一份源代码,看起来像这样:
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()来添加参数?