I can traverse the specific subtrees of clang AST using the recursivevisitor class but what I want to do is to traverse the clang AST node by node.
I'd be really grateful if anybody can help me with this.
Thanks in advance.
RecursiveASTVisitor can do what you need.
Implementing the member methods TraverseDecl(Decl *x)
, TraverseStmt(Stmt *x)
and TraverseType(QualType x)
for your RecursiveASTVisitor`-derived class (e.g. MyClass) will do the trick. Combined, those three methods will take you to each and every node in your AST.
Example:
class MyClass : public RecursiveASTVisitor<MyClass> {
public:
bool TraverseDecl(Decl *D) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseDecl(D); // Forward to base class
return true; // Return false to stop the AST analyzing
}
bool TraverseStmt(Stmt *x) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseStmt(x);
return true;
}
bool TraverseType(QualType x) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseType(x);
return true;
}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With