@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
41 lines • 1.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fingerPrintOfQuery = fingerPrintOfQuery;
exports.executeResolveValueQuery = executeResolveValueQuery;
const log_1 = require("../../../util/log");
const alias_tracking_1 = require("../../../dataflow/eval/resolve/alias-tracking");
const parse_1 = require("../../../slicing/criterion/parse");
/**
* Naive fingerprint to filter out duplicate queries.
*/
function fingerPrintOfQuery(query) {
return JSON.stringify(query);
}
/**
* Executes a resolve-value query.
*/
async function executeResolveValueQuery({ analyzer }, queries) {
const start = Date.now();
const results = {};
const graph = (await analyzer.dataflow()).graph;
const idMap = (await analyzer.normalize()).idMap;
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 => parse_1.SlicingCriterion.parse(criteria, idMap))
.flatMap(ident => (0, alias_tracking_1.resolveIdToValue)(ident, { graph, full: true, idMap, resolve: analyzer.flowrConfig.solver.variables, ctx: analyzer.inspectContext() }));
results[key] = {
values: values
};
}
return {
'.meta': {
timing: Date.now() - start
},
results
};
}
//# sourceMappingURL=resolve-value-query-executor.js.map