[cfe-dev] acquiring all the ancestors or descendants of a matched node

Himanshu via cfe-dev cfe-dev at lists.llvm.org
Wed Jul 13 13:23:07 PDT 2016


Hi Farzad,

If all you are looking for is finding a functionDecl wrapping a callExpr,
then following is what you want.

const clang::FunctionDecl* getParentFunctionDecl(ASTContext *context,const
clang::Stmt& stmt){
        auto it = context->getParents(stmt).begin();
        if(it == context->getParents(stmt).end())
             return nullptr;

        const clang::FunctionDecl *fDecl = it->get<clang::FunctionDecl>();

        if(fDecl)
              return fDecl;

        const clang::Stmt *aStmt = it->get<clang::Stmt>();

        if(aStmt)
             return getParentFunctionDecl(context,*aStmt);

       //nothing worked
       return nullptr;
}

--
Himanshu

On Wed, Jul 13, 2016 at 6:34 AM, Farzad Sadeghi via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Hi,
> I need to travel through all the ancestors or descendants of a matched
> AST node to later use that info to moodify parts of the input source
> code. I tried to look for ways to do that. I looked at the getParents
> member function of the ASTContext class. I could use that to just go
> up the AST hierarchy to visit all the ancestor nodes of my
> currently-matched node. but the problem with that is, when i get the
> parent node, i no longer have the context for that node to try and get
> its parent. I could try to rebuild the ASTContext for the new node but
> that seems to be another big task on its own, if possible. the lowest
> NodeKind (lowest in the C hierarchy) I'm looking for is a callExpr and
> the highest I'm looking for is a functionDecl. How can I obtain all
> the ancestors or descendants of a matched AST node after the match
> returns the control to run in MatchCallback?
>
>
> --
> Farzad Sadeghi
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160713/48b4d865/attachment.html>


More information about the cfe-dev mailing list