Ho codice sorgente che assomiglia a questo,Creazione di parametri per una funzione con clang
void update();
void update()
{
}
Iam cercando di analizzare questo codice con clangore e modificare il codice per questo.
typedef float v4sf attribute ((vector_size(16)));
void update(v4sf& v1, v4sf& v2);
void update(v4sf& v1, v4sf& v2)
{
}
Ho esaminato le classi di Rewriter di clang. Nella funzione che ho scritto come mostrato di seguito,
MyRecursiveASTVisitor::VisitFunctionDecl(FunctionDecl *f)
FunctionDecl trovi metodo setparams() che ho potuto usare. Dovrei creare parametri con questo metodo.
static ParmVarDecl *Create(ASTContext &C, DeclContext *DC,
SourceLocation StartLoc,
SourceLocation IdLoc, IdentifierInfo *Id,
QualType T, TypeSourceInfo *TInfo,
StorageClass S, StorageClass SCAsWritten,
Expr *DefArg);
I primi quattro argomenti della funzione di creazione possono essere ottenuti da FunctionDecl. Non sono sicuro di cosa debbano essere gli altri.
Come si creano i tipi e si assegnano anche valori in clang? I tipi non devono essere incorporati e potrebbero essere simili a quello aggiunto (v4sf) nel codice sorgente trasformato.
In questo modo (utilizzando i metodi clang) per eseguire le trasformazioni o posso utilizzare Rewriter.InsertText() per aggiungere i parametri?
Grazie! Sto usando Rewriter, ma ho alcuni problemi con la riscrittura dei messaggi obj-c, potresti guardare la mia domanda http://stackoverflow.com/questions/20418933/clang-tool-rewrite-objcmessageexpr? – BergP
come aggiungere plug-in clang, ad es. strumentazione? – gnzlbg