Let X = {x_1, x_2, x_3, ... , x_N} be the memory locations read in the current ast.Assign statement (say, S_cur).
For all ast.Assign statements that we have seen before this in the current scope, find the ones that write to any non-empty subset of X. Let's call the set of these statements S_before
For each statement S_alpha in S_before, add edge S_cur -> S_alpha
On seeing conditional blocks, maintain a set of identifiers initialized in their body so that the statements of an if don't have edges to statements in its else.
X = {x_1, x_2, x_3, ... , x_N}
be the memory locations read in the currentast.Assign
statement (say,S_cur
).ast.Assign
statements that we have seen before this in the current scope, find the ones that write to any non-empty subset ofX
. Let's call the set of these statementsS_before
S_alpha
inS_before
, add edgeS_cur
->S_alpha