[cfe-dev] CallGraph and TranslationUnits

Simone Pellegrini spellegrini at dps.uibk.ac.at
Sun Oct 25 06:24:52 PDT 2009


Dear all,
the clang::CallGraph class allows to build call graphs, by using the 
method addTU(ASTUnit&), starting from clang::ASTUnit object which (as 
far as I understand from the API) are normally generated from PCH files .
However, someone ( like me for example :) ) would like to build 
CallGraphs starting from instances of clang::idx::TranslationUnit class 
and the current API doesn't allow that. :(

If you look to the implementation of the addTU(ASTUnit&) method there is 
no reason why it couldn't be possible to built a CallGraph starting from 
a TranslationUnit object. What the method does is looking for the 
ASTContext, and TranslationUnit objects have the same getASTContext() 
method.

I think there is a little bit of confusion about the API. Right now it 
seems to be that there are two kinds of TranslationUnits (1 coming from 
PCH files and another used by the Indexer for indexing entities) and 
there is no homogeneous way to handle this 2 objects as they have no 
common ancestors. Why the getASTContext() method both in ASTUnit and 
TranslationUnit is not factorized into an interface? this will make 
CallGraph.addTU() more generic. Or, if possible, having ASTUnit 
implementing the TranslationUnit interface (I don't know whether there 
is any conceptual reason that prevent ASTUnit to be a TranslationUnit).

For the moment I was able to solve the problem by slightly changing the 
CallGraph interface by introducing the add(clang::ids::TranslationUnit&) 
method and by factorizing the implementations with a call to a private 
method addAST(ASTContext&). I think things will be even easier if the 
CallGraph is built starting from ASTContext.

Am I missing something?

regards, Simone P.





More information about the cfe-dev mailing list