@eagleoutice/flowr-dev
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
46 lines • 2.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HappensBeforeQueryDefinition = exports.HappensBeforeKey = void 0;
const ansi_1 = require("../../../util/text/ansi");
const time_1 = require("../../../util/text/time");
const joi_1 = __importDefault(require("joi"));
const happens_before_query_executor_1 = require("./happens-before-query-executor");
/**
* How an answer of the {@link HappensBeforeQuery} is keyed: the two criteria it was asked about, so that both
* the executor writing an answer and anyone reading one spell the key the same way.
*/
exports.HappensBeforeKey = {
name: 'HappensBeforeKey',
/** The key the answer for `a` and `b` is stored under. */
of(a, b) {
return `${a}<${b}`;
},
/** The two criteria a key was built from. */
criteria(key) {
const at = key.indexOf('<');
return at < 0 ? { a: key, b: '' } : { a: key.slice(0, at), b: key.slice(at + 1) };
}
};
exports.HappensBeforeQueryDefinition = {
title: 'Happens-Before Query',
executor: happens_before_query_executor_1.executeHappensBefore,
asciiSummarizer: (formatter, _analyzer, queryResults, result) => {
const out = queryResults;
result.push(`Query: ${(0, ansi_1.bold)('happens-before', formatter)} (${(0, time_1.printAsMs)(out['.meta'].timing, 0)})`);
for (const [fingerprint, value] of Object.entries(out.results)) {
const { a, b } = exports.HappensBeforeKey.criteria(fingerprint);
result.push(` ╰ ${(0, ansi_1.bold)(a, formatter)} happens before ${(0, ansi_1.bold)(b, formatter)}: ${value}`);
}
return true;
},
schema: joi_1.default.object({
type: joi_1.default.string().valid('happens-before').required().description('The type of the query.'),
a: joi_1.default.string().required().description('The first slicing criterion.'),
b: joi_1.default.string().required().description('The second slicing criterion.')
}).description('Happens-Before tracks whether a always happens before b.'),
flattenInvolvedNodes: () => []
};
//# sourceMappingURL=happens-before-query-format.js.map