@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
45 lines • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fingerPrintOfQuery = fingerPrintOfQuery;
exports.executeStaticSliceQuery = executeStaticSliceQuery;
const static_slicer_1 = require("../../../slicing/static/static-slicer");
const reconstruct_1 = require("../../../reconstruct/reconstruct");
const auto_select_defaults_1 = require("../../../reconstruct/auto-select/auto-select-defaults");
const magic_comments_1 = require("../../../reconstruct/auto-select/magic-comments");
const log_1 = require("../../../util/log");
function fingerPrintOfQuery(query) {
return JSON.stringify(query);
}
function executeStaticSliceQuery({ 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 slicing-query: ${key}, skipping...`);
}
const { criteria, noReconstruction, noMagicComments } = query;
const sliceStart = Date.now();
const slice = (0, static_slicer_1.staticSlicing)(graph, ast, criteria);
const sliceEnd = Date.now();
if (noReconstruction) {
results[key] = { slice: { ...slice, '.meta': { timing: sliceEnd - sliceStart } } };
}
else {
const reconstructStart = Date.now();
const reconstruct = (0, reconstruct_1.reconstructToCode)(ast, slice.result, noMagicComments ? auto_select_defaults_1.doNotAutoSelect : (0, magic_comments_1.makeMagicCommentHandler)(auto_select_defaults_1.doNotAutoSelect));
const reconstructEnd = Date.now();
results[key] = {
slice: { ...slice, '.meta': { timing: sliceEnd - sliceStart } },
reconstruct: { ...reconstruct, '.meta': { timing: reconstructEnd - reconstructStart } }
};
}
}
return {
'.meta': {
timing: Date.now() - start
},
results
};
}
//# sourceMappingURL=static-slice-query-executor.js.map