@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
33 lines • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fingerPrintOfQuery = fingerPrintOfQuery;
exports.executeResolveValueQuery = executeResolveValueQuery;
const log_1 = require("../../../util/log");
const parse_1 = require("../../../slicing/criterion/parse");
const resolve_by_name_1 = require("../../../dataflow/environments/resolve-by-name");
function fingerPrintOfQuery(query) {
return JSON.stringify(query);
}
function executeResolveValueQuery({ dataflow: { graph }, ast }, queries) {
const start = Date.now();
const results = {};
for (const query of queries) {
const key = fingerPrintOfQuery(query);
if (results[key]) {
log_1.log.warn(`Duplicate Key for resolve-value-query: ${key}, skipping...`);
}
const values = query.criteria
.map(criteria => (0, parse_1.slicingCriterionToId)(criteria, ast.idMap))
.flatMap(ident => (0, resolve_by_name_1.resolveIdToValue)(ident, { graph, full: true, idMap: ast.idMap }) ?? []);
results[key] = {
values: values ? [...new Set(values)] : []
};
}
return {
'.meta': {
timing: Date.now() - start
},
results
};
}
//# sourceMappingURL=resolve-value-query-executor.js.map