@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
46 lines • 2.5 kB
JavaScript
;
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