UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

34 lines (33 loc) 2.53 kB
import { type CfgBasicBlockVertex, type CfgMarkerVertex, type CfgExpressionVertex, CfgVertex, type CfgStatementVertex, type ControlFlowInformation } from './control-flow-graph'; import type { NodeId } from '../r-bridge/lang-4.x/ast/model/processing/node-id'; import { type DataflowGraphVertexArgument, type DataflowGraphVertexFunctionCall, type DataflowGraphVertexFunctionDefinition, type DataflowGraphVertexUse, type DataflowGraphVertexValue, type DataflowGraphVertexVariableDefinition } from '../dataflow/graph/vertex'; import { type BasicCfgGuidedVisitorConfiguration, 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; readonly defaultVisitingType?: 'entry' | 'exit'; } /** * 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; protected onEndMarkerNode(node: CfgMarkerVertex): void; protected visitDataflowNode(node: Exclude<CfgVertex, CfgBasicBlockVertex>): void; /** * called for every cfg vertex that has no corresponding dataflow vertex. */ protected visitUnknown(_vertex: Exclude<CfgVertex, CfgBasicBlockVertex>): 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; }