У меня есть исходный код, который выглядит следующим образом.
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);
Первые четыре аргумента функции создания можно получить из FunctionDecl. Я не уверен, какими должны быть остальные.
Как создавать типы, а также присваивать им значения в clang? Типы не обязательно должны быть встроенными и могут быть такими, как добавленный (v4sf) в преобразованном исходном коде.
Это способ (с использованием методов clang) для выполнения преобразований или я могу использовать Rewriter.InsertText() для добавления параметров?