UNPKG

@eagleoutice/flowr-dev

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

33 lines (32 loc) 2.54 kB
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>; };