@eagleoutice/flowr-dev
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
33 lines (32 loc) • 2.54 kB
TypeScript
import type { DataflowGraph } from '../../../../../graph/graph';
import type { DataflowGraphVertexFunctionDefinition } from '../../../../../graph/vertex';
import { NodeId } from '../../../../../../r-bridge/lang-4.x/ast/model/processing/node-id';
import { type REnvironmentInformation } from '../../../../../environments/environment';
import type { FlowrAnalyzerContext } from '../../../../../../project/context/flowr-analyzer-context';
import type { IdentifierReference } from '../../../../../environments/identifier';
/**
* Computes, for every function-definition vertex `F`, `summary(F) = own(F)` unioned with `summary(G)` over every transitive callee `G`.
* @param graph - the fully linked dataflow graph
* @param own - the effects a single function definition produces itself (its contribution to the summary)
* @returns a map from each function-definition vertex to its transitive-effect summary
* @useInstead {@link Dataflow.sideEffects.callGraphSummaries}
*/
export declare function computeCallGraphSummaries<T>(this: void, graph: DataflowGraph, own: (id: NodeId, fdef: DataflowGraphVertexFunctionDefinition) => Iterable<T>): Map<NodeId, Set<T>>;
/**
* Links every materialized package-export vertex back to the `library()`/`use()` call that loaded it,
* reading the loading call from the export binding's `definedAt` in the (final, authoritative) environment.
* Only vertices created on demand (exports actually referenced) get an edge, keeping the graph small.
*/
export declare function linkMaterializedExportsToLoaders(graph: DataflowGraph, environment: REnvironmentInformation): void;
/** Re-resolves still-open reads whose name is one of the transitively escaped `<<-` definitions in `escapedNames`, adding {@link EdgeType.Reads} edges. */
export declare function reResolveOpenReferences(this: void, graph: DataflowGraph, environment: REnvironmentInformation, references: readonly IdentifierReference[], escapedNames: ReadonlySet<string>): void;
/**
* Propagates every function's escaped side effects (attached packages and `<<-` definitions) to its transitive callers.
* @returns the enriched top-level environment and whether it grew (so the extractor can re-link and re-run to a fixpoint).
* @useInstead {@link Dataflow.sideEffects.propagateTransitive}
*/
export declare function propagateTransitiveSideEffects(this: void, graph: DataflowGraph, environment: REnvironmentInformation, ctx: FlowrAnalyzerContext): {
environment: REnvironmentInformation;
grew: boolean;
escapedNames: Set<string>;
};