1 | .once |
2 | |
3 | .include "control-flow.dl" |
4 | |
5 | // At statement s, caller invokes callee. |
6 | .decl call(caller: Function, s: Statement, callee:Function) |
7 | .input call |
8 | |
9 | // (f, s) is in this set if there is a call into the garbage collector, either |
10 | // directly or indirectly, at statement s in function f. |
11 | .decl might_collect(f: Function, s: Statement) |
12 | .output might_collect |
13 | |
14 | might_collect(f, s) :- call(f, s, "mylib.MaybeCollect"). |
15 | might_collect(f, s) :- call(f, s, g), might_collect(g, _). |