@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
39 lines • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.processQuote = processQuote;
const known_call_handling_1 = require("../known-call-handling");
const edge_1 = require("../../../../../graph/edge");
const built_in_proc_name_1 = require("../../../../../environments/built-in-proc-name");
/**
* Process a call to `quote` or similar nse/substitution functions.
*/
function processQuote(name, args, rootId, data, config) {
const startEnv = data.environment;
const { information, processedArguments, fnRef } = (0, known_call_handling_1.processKnownFunctionCall)({ name, args, rootId, data, forceArgs: config.forceArgs, origin: built_in_proc_name_1.BuiltInProcName.Quote });
let inRefs = [fnRef];
let outRefs = [];
let unknownRefs = [];
for (let i = 0; i < args.length; i++) {
const processedArg = processedArguments[i];
if (processedArg && i !== config?.quoteArgumentsWithIndex) {
inRefs = inRefs.concat(processedArg.in);
outRefs = outRefs.concat(processedArg.out);
unknownRefs = unknownRefs.concat(processedArg.unknownReferences);
}
else if (processedArg) {
information.graph.addEdge(rootId, processedArg.entryPoint, edge_1.EdgeType.NonStandardEvaluation);
/* nse actually affects _everything_ within that argument! */
for (const [vtx] of processedArg.graph.vertices(true)) {
information.graph.addEdge(rootId, vtx, edge_1.EdgeType.NonStandardEvaluation);
}
}
}
return {
...information,
environment: startEnv,
in: inRefs,
out: outRefs,
unknownReferences: unknownRefs
};
}
//# sourceMappingURL=built-in-quote.js.map