Module CallGraphConstruction
INTERNAL: Do not use.
Provides logic for constructing a call graph in mutual recursion with type tracking.
When type tracking is used to construct a call graph, we cannot use the join-order
from stepInlineLate
, because step
becomes a recursive call, which means that we
will have a conjunct with 3 recursive calls: the call to step
, the call to stepProj
,
and the recursive type tracking call itself. The solution is to split the three-way
non-linear recursion into two non-linear predicates: one that first joins with the
projected stepCall
relation, followed by a predicate that joins with the full
stepCall
relation (stepNoCall
not being recursive, can be join-ordered in the
same way as in stepInlineLate
).
Import path
import semmle.python.dataflow.new.internal.TypeTracker
Modules
Module signatures
InputSig | The input to call graph construction. |