UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

34 lines 1.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeProvenanceQuery = executeProvenanceQuery; const log_1 = require("../../../util/log"); const r_function_definition_1 = require("../../../r-bridge/lang-4.x/ast/model/nodes/r-function-definition"); const parse_1 = require("../../../slicing/criterion/parse"); const df_helper_1 = require("../../../dataflow/graph/df-helper"); const model_1 = require("../../../r-bridge/lang-4.x/ast/model/model"); /** * Execute a provenance query collection, {@link Dataflow.provenance} */ async function executeProvenanceQuery({ analyzer }, queries) { const start = Date.now(); const results = {}; const nast = await analyzer.normalize(); const df = await analyzer.dataflow(); for (const query of queries) { const key = query.criterion; if (results[key]) { log_1.log.warn(`Duplicate key for provenance query: ${key}, skipping...`); } const criterionId = parse_1.SlicingCriterion.tryParse(key, nast.idMap) ?? key; const provenanceNode = nast.idMap.get(criterionId); const fdef = r_function_definition_1.RFunctionDefinition.wrappingFunctionDefinition(provenanceNode, nast.idMap); results[key] = Array.from(df_helper_1.Dataflow.provenance(criterionId, df.graph, fdef ? model_1.RNode.collectAllIds(fdef) : undefined)); } return { '.meta': { timing: Date.now() - start }, results }; } //# sourceMappingURL=provenance-query-executor.js.map