UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

33 lines (32 loc) 2.66 kB
import type { DataflowProcessorInformation } from '../../../../processor'; import type { DataflowInformation } from '../../../../info'; import type { ForceArguments } from './common'; import type { RSymbol } from '../../../../../r-bridge/lang-4.x/ast/model/nodes/r-symbol'; import type { ParentInformation } from '../../../../../r-bridge/lang-4.x/ast/model/processing/decorate'; import type { RFunctionArgument } from '../../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-call'; import type { NodeId } from '../../../../../r-bridge/lang-4.x/ast/model/processing/node-id'; import type { RNode } from '../../../../../r-bridge/lang-4.x/ast/model/model'; import type { IdentifierReference } from '../../../../environments/identifier'; import { DataflowGraph } from '../../../../graph/graph'; import type { ContainerIndicesCollection } from '../../../../graph/vertex'; export interface ProcessKnownFunctionCallInput<OtherInfo> extends ForceArguments { readonly name: RSymbol<OtherInfo & ParentInformation>; readonly args: readonly (RNode<OtherInfo & ParentInformation> | RFunctionArgument<OtherInfo & ParentInformation>)[]; readonly rootId: NodeId; readonly data: DataflowProcessorInformation<OtherInfo & ParentInformation>; /** should arguments be processed from right to left? This does not affect the order recorded in the call but of the environments */ readonly reverseOrder?: boolean; /** which arguments are to be marked as {@link EdgeType#NonStandardEvaluation|non-standard-evaluation}? */ readonly markAsNSE?: readonly number[]; /** allows passing a data processor in-between each argument */ readonly patchData?: (data: DataflowProcessorInformation<OtherInfo & ParentInformation>, arg: number) => DataflowProcessorInformation<OtherInfo & ParentInformation>; /** Does the call have a side effect that we do not know a lot about which may have further consequences? */ readonly hasUnknownSideEffect?: boolean; } export interface ProcessKnownFunctionCallResult { readonly information: DataflowInformation; readonly processedArguments: readonly (DataflowInformation | undefined)[]; readonly fnRef: IdentifierReference; } export declare function markNonStandardEvaluationEdges(markAsNSE: readonly number[], callArgs: readonly (DataflowInformation | undefined)[], finalGraph: DataflowGraph, rootId: NodeId): void; export declare function processKnownFunctionCall<OtherInfo>({ name, args, rootId, data, reverseOrder, markAsNSE, forceArgs, patchData, hasUnknownSideEffect }: ProcessKnownFunctionCallInput<OtherInfo>, indicesCollection?: ContainerIndicesCollection): ProcessKnownFunctionCallResult;