@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
39 lines • 1.39 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 df_helper_1 = require("../../../dataflow/graph/df-helper");
/**
* Produce a fingerprint string for an origin query
*/
function fingerPrintOfQuery(query) {
return query.criterion;
}
/**
* Execute origin queries, catching duplicates with the same fingerprint
*/
async function executeResolveValueQuery({ analyzer }, 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 origin-query: ${key}, skipping...`);
}
const astId = parse_1.SlicingCriterion.tryParse(key, (await analyzer.normalize()).idMap);
if (astId === undefined) {
log_1.log.warn(`Could not resolve id for ${key}, skipping...`);
continue;
}
results[key] = df_helper_1.Dataflow.origin((await analyzer.dataflow()).graph, astId);
}
return {
'.meta': {
timing: Date.now() - start
},
results
};
}
//# sourceMappingURL=origin-query-executor.js.map