analyzeCapabilitiesReachable function

Map<String, Object?> analyzeCapabilitiesReachable(
  1. Program program
)

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),
  );
}