analyzeCapabilitiesReachable function
Reachability-scoped capability analysis: analyze only the transitive closure
of the program's entry function. Native-only (ball audit --reachable-only).
Implementation
Map<String, Object?> analyzeCapabilitiesReachable(Program program) {
final table = buildCapabilityTable();
final baseModules = _identifyBaseModules(program.modules);
final userFns = _collectUserFunctionNames(program.modules);
final fnCaps = <String, Object?>{}; // "module.function" -> List<String> caps
final capSites = <String, Object?>{}; // capName -> List<site>
final visited = <String>[];
_analyzeReachableFn({
'modules': program.modules,
'baseModules': baseModules,
'table': table,
'userFns': userFns,
'fnCaps': fnCaps,
'capSites': capSites,
'visited': visited,
'module': program.entryModule,
'function': program.entryFunction,
});
final functionsOut = <Object?>[];
for (final key in fnCaps.keys) {
final dot = key.indexOf('.');
final mod = key.substring(0, dot);
final fn = key.substring(dot + 1);
functionsOut.add({
'module': mod,
'function': fn,
'capabilities': fnCaps[key],
});
}
return _buildReportFromFunctions(
program.name,
program.version,
functionsOut,
capSites,
_detectBaseFnShadows(program.modules, table),
);
}