clang API Documentation

Public Types | Public Member Functions | Static Public Member Functions | Friends
clang::CallGraph Class Reference

The AST-based call graph. More...

#include <CallGraph.h>

Inheritance diagram for clang::CallGraph:
Inheritance graph
[legend]
Collaboration diagram for clang::CallGraph:
Collaboration graph
[legend]

List of all members.

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.
CallGraphNodegetNode (const Decl *) const
 Lookup the node for the given declaration.
CallGraphNodegetOrInsertNode (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.
CallGraphNodegetRoot () 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

Detailed Description

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.


Member Typedef Documentation

typedef FunctionMapTy::const_iterator clang::CallGraph::const_iterator

Definition at line 70 of file CallGraph.h.

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.

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.


Constructor & Destructor Documentation

Definition at line 103 of file CallGraph.cpp.

References getOrInsertNode().

Definition at line 107 of file CallGraph.cpp.


Member Function Documentation

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().

Definition at line 73 of file CallGraph.h.

void CallGraph::dump ( ) const

Definition at line 194 of file CallGraph.cpp.

References print().

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.

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().

\ 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

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().

Recursively visit a statement or expression, by dispatching to Traverse*() based on the argument's dynamic type.

Returns:
false if the visitation was terminated early, true otherwise (including when the argument is NULL).

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.

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().

Part of recursive declaration visitation.

Definition at line 112 of file CallGraph.h.

References addNodesForBlocks(), and includeInGraph().


Friends And Related Function Documentation

friend class CallGraphNode [friend]

Definition at line 35 of file CallGraph.h.

Referenced by getOrInsertNode().


The documentation for this class was generated from the following files: