UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

33 lines (32 loc) 2.32 kB
import type { CfgExpressionVertex, CfgStatementVertex, ControlFlowInformation } from './control-flow-graph'; import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id'; import type { DataflowGraphVertexArgument, DataflowGraphVertexFunctionCall, DataflowGraphVertexFunctionDefinition, DataflowGraphVertexUse, DataflowGraphVertexValue, DataflowGraphVertexVariableDefinition } from '../dataflow/graph/vertex'; import type { BasicCfgGuidedVisitorConfiguration } from './basic-cfg-guided-visitor'; import { BasicCfgGuidedVisitor } from './basic-cfg-guided-visitor'; import type { DataflowGraph } from '../dataflow/graph/graph'; export interface DataflowCfgGuidedVisitorConfiguration<ControlFlow extends ControlFlowInformation = ControlFlowInformation, Dfg extends DataflowGraph = DataflowGraph> extends BasicCfgGuidedVisitorConfiguration<ControlFlow> { readonly dfg: Dfg; } /** * This visitor extends on the {@link BasicCfgGuidedVisitor} by dispatching visitors based on the dataflow graph. * * Use {@link BasicCfgGuidedVisitor#start} to start the traversal. */ export declare class DataflowAwareCfgGuidedVisitor<ControlFlow extends ControlFlowInformation = ControlFlowInformation, Dfg extends DataflowGraph = DataflowGraph, Config extends DataflowCfgGuidedVisitorConfiguration<ControlFlow, Dfg> = DataflowCfgGuidedVisitorConfiguration<ControlFlow, Dfg>> extends BasicCfgGuidedVisitor<ControlFlow, Config> { /** * Get the dataflow graph vertex for the given id */ protected getDataflowGraph(id: NodeId): DataflowGraphVertexArgument | undefined; protected onStatementNode(node: CfgStatementVertex): void; protected onExpressionNode(node: CfgExpressionVertex): void; private onExprOrStmtNode; /** * called for every cfg vertex that has no corresponding dataflow vertex. */ protected visitUnknown(_vertex: CfgStatementVertex | CfgExpressionVertex): void; protected visitValue(_val: DataflowGraphVertexValue): void; protected visitVariableUse(_use: DataflowGraphVertexUse): void; protected visitVariableDefinition(_def: DataflowGraphVertexVariableDefinition): void; protected visitFunctionDefinition(_def: DataflowGraphVertexFunctionDefinition): void; protected visitFunctionCall(_call: DataflowGraphVertexFunctionCall): void; }