Gets a node that controls whether other nodes are evaluated.
In the base case, this is the last node of
This definition accounts for (short circuting)
or-expressions, as the structure
of basic blocks will reflect their semantics.
However, in the program
if not is_safe(path): return
the last node in the
We would like to consider also
is_safe(path) a guard node, albeit with
Thus we recurse through