UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

67 lines 2.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRangeStart = getRangeStart; exports.getRangeEnd = getRangeEnd; exports.rangeFrom = rangeFrom; exports.mergeRanges = mergeRanges; exports.rangeStartsCompletelyBefore = rangeStartsCompletelyBefore; exports.rangesOverlap = rangesOverlap; exports.addRanges = addRanges; exports.rangeCompare = rangeCompare; const assert_1 = require("./assert"); function getRangeStart(p) { return p === undefined ? undefined : [p[0], p[1]]; } function getRangeEnd(p) { return p === undefined ? undefined : [p[2], p[3]]; } /** * This does not ensure ordering of start and end! * * @param sl - start line * @param sc - start column * @param el - end line * @param ec - end column */ function rangeFrom(sl, sc, el, ec) { return [Number(sl), Number(sc), Number(el), Number(ec)]; } function mergeRanges(...rs) { (0, assert_1.guard)(rs.length > 0, 'Cannot merge no ranges'); return rs.reduce(([sl, sc, el, ec], [nsl, nsc, nel, nec]) => [ ...(sl < nsl || (sl === nsl && sc < nsc) ? [sl, sc] : [nsl, nsc]), ...(el > nel || (el === nel && ec > nec) ? [el, ec] : [nel, nec]) ], rs[0]); } /** * @returns true iff `r1` starts and ends before `r2` starts (i.e., if `r1` and `r2` do not overlap and `r1` comes before `r2` */ function rangeStartsCompletelyBefore([, , r1el, r1ec], [r2sl, r2sc, ,]) { return r1el < r2sl || (r1el === r2sl && r1ec < r2sc); } /** * Checks if the two ranges overlap. */ function rangesOverlap([r1sl, r1sc, r1el, r1ec], [r2sl, r2sc, r2el, r2ec]) { return r1sl <= r2el && r2sl <= r1el && r1sc <= r2ec && r2sc <= r1ec; } /** * Calculate the component-wise sum of two ranges */ function addRanges([r1sl, r1sc, r1el, r1ec], [r2sl, r2sc, r2el, r2ec]) { return [r1sl + r2sl, r1sc + r2sc, r1el + r2el, r1ec + r2ec]; } /** * Provides a comparator for {@link SourceRange}s that sorts them in ascending order. * * @returns a positive number if `r1` comes after `r2`, a negative number if `r1` comes before `r2`, and `0` if they are equal */ function rangeCompare([r1sl, r1sc, ,], [r2sl, r2sc, ,]) { if (r1sl === r2sl) { return r1sc - r2sc; } else { return r1sl - r2sl; } } //# sourceMappingURL=range.js.map