UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

46 lines 2.5 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 type_1 = require("../../../../r-bridge/lang-4.x/ast/model/type"); const edge_1 = require("../../../graph/edge"); 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.mergeWith(defaultValue.graph) : name.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) { log_1.log.trace(`parameter ${writtenNode.name} (${writtenNode.nodeId}) is defined at id ${writtenNode.definedAt} with ${defaultValue === undefined ? 'no default value' : ' no default value'}`); graph.setDefinitionOfVertex(writtenNode); environment = (0, define_1.define)(writtenNode, false, environment); if (defaultValue !== undefined) { if (parameter.defaultValue?.type === type_1.RType.FunctionDefinition) { graph.addEdge(writtenNode, parameter.defaultValue.info.id, edge_1.EdgeType.DefinedBy); } else { const definedBy = [...defaultValue.in, ...defaultValue.unknownReferences]; for (const node of definedBy) { graph.addEdge(writtenNode, node, edge_1.EdgeType.DefinedBy); } } } } return { unknownReferences: [], in: defaultValue === undefined ? [] : [...defaultValue.in, ...defaultValue.unknownReferences, ...name.in], out: [...(defaultValue?.out ?? []), ...name.out, ...name.unknownReferences], graph: graph, environment: environment, entryPoint: parameter.info.id, exitPoints: [{ nodeId: parameter.info.id, type: 0 /* ExitPointType.Default */, controlDependencies: data.controlDependencies }] }; } //# sourceMappingURL=process-parameter.js.map