clang API Documentation
The AST-based call graph. More...
#include <CallGraph.h>
Public Types | |
typedef FunctionMapTy::iterator | iterator |
typedef FunctionMapTy::const_iterator | const_iterator |
typedef llvm::SetVector < CallGraphNode * >::iterator | nodes_iterator |
typedef llvm::SetVector < CallGraphNode * > ::const_iterator | const_nodes_iterator |
Public Member Functions | |
CallGraph () | |
~CallGraph () | |
void | addToCallGraph (Decl *D) |
Populate the call graph with the functions in the given declaration. | |
CallGraphNode * | getNode (const Decl *) const |
Lookup the node for the given declaration. | |
CallGraphNode * | getOrInsertNode (Decl *) |
Lookup the node for the given declaration. If none found, insert one into the graph. | |
iterator | begin () |
iterator | end () |
const_iterator | begin () const |
const_iterator | end () const |
unsigned | size () const |
Get the number of nodes in the graph. | |
CallGraphNode * | getRoot () const |
void | print (raw_ostream &os) const |
void | dump () const |
void | viewGraph () const |
void | addNodesForBlocks (DeclContext *D) |
bool | VisitFunctionDecl (FunctionDecl *FD) |
bool | VisitObjCMethodDecl (ObjCMethodDecl *MD) |
Part of recursive declaration visitation. | |
bool | TraverseStmt (Stmt *S) |
Recursively visit a statement or expression, by dispatching to Traverse*() based on the argument's dynamic type. | |
bool | shouldWalkTypesOfTypeLocs () const |
Return whether this visitor should recurse into the types of TypeLocs. | |
Static Public Member Functions | |
static bool | includeInGraph (const Decl *D) |
Determine if a declaration should be included in the graph. | |
Friends | |
class | CallGraphNode |
The AST-based call graph.
The call graph extends itself with the given declarations by implementing the recursive AST visitor, which constructs the graph by visiting the given declarations.
Definition at line 34 of file CallGraph.h.
typedef FunctionMapTy::const_iterator clang::CallGraph::const_iterator |
Definition at line 70 of file CallGraph.h.
typedef llvm::SetVector<CallGraphNode *>::const_iterator clang::CallGraph::const_nodes_iterator |
Definition at line 87 of file CallGraph.h.
typedef FunctionMapTy::iterator clang::CallGraph::iterator |
Iterators through all the elements in the graph. Note, this gives non-deterministic order.
Definition at line 69 of file CallGraph.h.
typedef llvm::SetVector<CallGraphNode *>::iterator clang::CallGraph::nodes_iterator |
Iterators through all the nodes of the graph that have no parent. These are the unreachable nodes, which are either unused or are due to us failing to add a call edge due to the analysis imprecision.
Definition at line 86 of file CallGraph.h.
Definition at line 103 of file CallGraph.cpp.
References getOrInsertNode().
Definition at line 107 of file CallGraph.cpp.
void CallGraph::addNodesForBlocks | ( | DeclContext * | D | ) |
Definition at line 94 of file CallGraph.cpp.
References clang::DeclContext::decls().
Referenced by VisitFunctionDecl(), and VisitObjCMethodDecl().
void clang::CallGraph::addToCallGraph | ( | Decl * | D | ) | [inline] |
Populate the call graph with the functions in the given declaration.
Recursively walks the declaration to find all the dependent Decls as well.
Definition at line 53 of file CallGraph.h.
References clang::RecursiveASTVisitor< CallGraph >::TraverseDecl().
iterator clang::CallGraph::begin | ( | ) | [inline] |
Definition at line 71 of file CallGraph.h.
Referenced by llvm::GraphTraits< clang::CallGraph * >::nodes_begin(), and llvm::GraphTraits< const clang::CallGraph * >::nodes_begin().
const_iterator clang::CallGraph::begin | ( | ) | const [inline] |
Definition at line 73 of file CallGraph.h.
void CallGraph::dump | ( | ) | const |
Definition at line 194 of file CallGraph.cpp.
References print().
iterator clang::CallGraph::end | ( | ) | [inline] |
Definition at line 72 of file CallGraph.h.
Referenced by llvm::GraphTraits< clang::CallGraph * >::nodes_end(), and llvm::GraphTraits< const clang::CallGraph * >::nodes_end().
const_iterator clang::CallGraph::end | ( | ) | const [inline] |
Definition at line 74 of file CallGraph.h.
CallGraphNode * CallGraph::getNode | ( | const Decl * | F | ) | const |
Lookup the node for the given declaration.
Definition at line 148 of file CallGraph.cpp.
CallGraphNode * CallGraph::getOrInsertNode | ( | Decl * | F | ) |
Lookup the node for the given declaration. If none found, insert one into the graph.
Definition at line 154 of file CallGraph.cpp.
References clang::CallGraphNode::addCallee(), CallGraphNode, and Node.
Referenced by CallGraph().
CallGraphNode* clang::CallGraph::getRoot | ( | ) | const [inline] |
\ brief Get the virtual root of the graph, all the functions available externally are represented as callees of the node.
Definition at line 81 of file CallGraph.h.
Referenced by llvm::GraphTraits< clang::CallGraph * >::getEntryNode(), llvm::GraphTraits< const clang::CallGraph * >::getEntryNode(), and llvm::DOTGraphTraits< const CallGraph * >::getNodeLabel().
bool CallGraph::includeInGraph | ( | const Decl * | D | ) | [static] |
Determine if a declaration should be included in the graph.
Definition at line 111 of file CallGraph.cpp.
References clang::Decl::getBody(), and clang::IdentifierInfo::getName().
Referenced by VisitFunctionDecl(), and VisitObjCMethodDecl().
void CallGraph::print | ( | raw_ostream & | os | ) | const |
Definition at line 166 of file CallGraph.cpp.
References clang::CallGraphNode::begin(), clang::CallGraphNode::end(), and clang::CallGraphNode::print().
Referenced by dump().
bool clang::CallGraph::shouldWalkTypesOfTypeLocs | ( | ) | const [inline] |
Return whether this visitor should recurse into the types of TypeLocs.
Reimplemented from clang::RecursiveASTVisitor< CallGraph >.
Definition at line 123 of file CallGraph.h.
unsigned clang::CallGraph::size | ( | ) | const [inline] |
Get the number of nodes in the graph.
Definition at line 77 of file CallGraph.h.
Referenced by llvm::GraphTraits< clang::CallGraph * >::size(), and llvm::GraphTraits< const clang::CallGraph * >::size().
bool clang::CallGraph::TraverseStmt | ( | Stmt * | S | ) | [inline] |
Recursively visit a statement or expression, by dispatching to Traverse*() based on the argument's dynamic type.
Reimplemented from clang::RecursiveASTVisitor< CallGraph >.
Definition at line 121 of file CallGraph.h.
void CallGraph::viewGraph | ( | ) | const |
Definition at line 198 of file CallGraph.cpp.
bool clang::CallGraph::VisitFunctionDecl | ( | FunctionDecl * | FD | ) | [inline] |
Part of recursive declaration visitation. We recursively visit all the declarations to collect the root functions.
Definition at line 97 of file CallGraph.h.
References addNodesForBlocks(), includeInGraph(), and clang::FunctionDecl::isGlobal().
bool clang::CallGraph::VisitObjCMethodDecl | ( | ObjCMethodDecl * | MD | ) | [inline] |
Part of recursive declaration visitation.
Definition at line 112 of file CallGraph.h.
References addNodesForBlocks(), and includeInGraph().
friend class CallGraphNode [friend] |
Definition at line 35 of file CallGraph.h.
Referenced by getOrInsertNode().