UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

51 lines 2.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processFunctionParameter = processFunctionParameter; const processor_1 = require("../../../processor"); const log_1 = require("../../../../util/log"); const identifier_1 = require("../../../environments/identifier"); const define_1 = require("../../../environments/define"); const edge_1 = require("../../../graph/edge"); const r_function_definition_1 = require("../../../../r-bridge/lang-4.x/ast/model/nodes/r-function-definition"); /** * */ function processFunctionParameter(parameter, data) { const name = (0, processor_1.processDataflowFor)(parameter.name, data); const defaultValue = parameter.defaultValue === undefined ? undefined : (0, processor_1.processDataflowFor)(parameter.defaultValue, data); const graph = defaultValue === undefined ? name.graph : name.graph.mergeWith(defaultValue.graph); const writtenNodes = name.unknownReferences.map(n => ({ ...n, type: identifier_1.ReferenceType.Parameter, definedAt: parameter.info.id })); let environment = name.environment; for (const writtenNode of writtenNodes) { const wid = writtenNode.nodeId; (0, log_1.expensiveTrace)(log_1.log, () => `parameter ${writtenNode.name} (${wid}) is defined at id ${writtenNode.definedAt} with ${defaultValue === undefined ? 'no default value' : ' a default value'}`); graph.setDefinitionOfVertex(writtenNode, defaultValue?.entryPoint ? [defaultValue?.entryPoint] : []); environment = (0, define_1.define)(writtenNode, false, environment); if (defaultValue !== undefined) { if (r_function_definition_1.RFunctionDefinition.is(parameter.defaultValue)) { graph.addEdge(wid, parameter.defaultValue.info.id, edge_1.EdgeType.DefinedBy); } else { const definedBy = defaultValue.in.concat(defaultValue.unknownReferences); for (const node of definedBy) { graph.addEdge(wid, node.nodeId, edge_1.EdgeType.DefinedBy); } } } } return { unknownReferences: [], in: defaultValue === undefined ? [] : defaultValue.in.concat(defaultValue.unknownReferences, name.in), out: (defaultValue?.out ?? []).concat(name.out, name.unknownReferences), graph: graph, environment: environment, entryPoint: parameter.info.id, exitPoints: [{ nodeId: parameter.info.id, type: 0 /* ExitPointType.Default */, cds: data.cds }], hooks: [] }; } //# sourceMappingURL=process-parameter.js.map