私はこのようなソースコードを持っています、
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のリライタークラスを見ました。以下に示すように私が書いた関数では、
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 関数の最初の 4 つの引数は、FunctionDecl から取得できます。残りの部分がどうあるべきかわかりません。
タイプを作成し、clang でそれらに値を割り当てるにはどうすればよいですか? 型は組み込みである必要はなく、変換されたソース コードに追加されたもの (v4sf) のようなものである可能性があります。
この方法で (clang メソッドを使用して) 変換を行うか、Rewriter.InsertText() を使用してパラメーターを追加できますか?