evaluate method
Evaluates the rule and returns derived facts.
Implementation
@override
List<Fact> evaluate(
Map<String, List<List<Object>>> facts,
Map<String, List<List<Object>>> derived,
) {
final result = <Fact>[];
final stores = facts['StoreField'] ?? [];
final pointsTo = getCombined('VarPointsTo', facts, derived);
final tainted = getCombined('TaintedVar', facts, derived);
for (final store in stores) {
final baseVar = store[0];
final field = store[1];
final sourceVar = store[2];
for (final basePt in pointsTo) {
if (basePt[0] == baseVar) {
final baseHeap = basePt[1];
for (final t in tainted) {
if (t[0] == sourceVar) {
result.add(Fact('TaintedHeap', [baseHeap, field, t[1], t[2]]));
}
}
}
}
}
return result;
}