@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
34 lines (33 loc) • 2.76 kB
TypeScript
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, FunctionOriginInformation } 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;
readonly origin: FunctionOriginInformation | 'default';
}
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, origin }: ProcessKnownFunctionCallInput<OtherInfo>, indicesCollection?: ContainerIndicesCollection): ProcessKnownFunctionCallResult;