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