UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

35 lines 1.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.vectorFrom = vectorFrom; exports.flattenVectorElements = flattenVectorElements; const r_value_1 = require("../r-value"); const assert_1 = require("../../../../util/assert"); const general_1 = require("../general"); /** * Creates an abstract vector from abstract values * @param elements - elements that the vector should contain * @returns abstract ValueVector */ function vectorFrom(elements) { (0, assert_1.guard)((0, r_value_1.isTop)(elements) || (0, r_value_1.isBottom)(elements) || Array.isArray(elements), 'Expected array of values'); return { type: 'vector', elements, elementDomain: r_value_1.Top }; } /** * Flattens all elements inside of a vector * A set containing only one element is also replaced by its only element * @param s - vector to flatten * @returns flattened vactor, if all elements are not bottom / top */ function flattenVectorElements(s) { return (0, general_1.bottomTopGuard)(s) ?? s.flatMap(e => { return e.type === 'vector' ? flattenVectorElements(e.elements) : e.type === 'set' && (0, r_value_1.isValue)(e.elements) && e.elements.length === 1 ? e.elements[0].type === 'vector' ? flattenVectorElements(e.elements[0].elements) : e.elements : e; }); } //# sourceMappingURL=vector-constants.js.map