NOTE: Since an “invocation” contains callsite information and a path back to its ancestor calls, the “invocation” call-graph must be a tree. This has two important consequences: 1. The graph is incomplete; it has quite limited depth in order to keep the graph to a sensible size. 2. The graph is precise. Since different invocations are distinct, there can be no “cross-talk” between different calls to the same function.
This class represents a static approximation to the dynamic call-graph. A