Existing systems use interprocedural data flow to analyze the source code
of an entire program thereby requiring significant resources. Instead
forward and backward chase components reference data structures (e.g.,
state machines) that identify instructions within a intraprocedural data
flow graph. Based on how states of the state machine correspond to
instructions in the data flow, the state machines direct the data flow
chase to other procedures in a call graph, to instructions indicated in a
global reference list, to instructions indicated in a field reference
list, to instructions indicated by a pointer dereference, or to another
instruction in the present procedure. Then, the chase continues in the
data flow graph of the procedure containing the instruction.