UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

41 lines 1.52 kB
"use strict"; 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