@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
33 lines (32 loc) • 2.32 kB
TypeScript
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;
}