// Taken from: https://github.com/paulmillr/es6-shim/ 'use strict'; var toInteger = require('../../../number/to-integer') , toPosInt = require('../../../number/to-pos-integer') , validValue = require('../../../object/valid-value') , hasOwnProperty = Object.prototype.hasOwnProperty , max = Math.max, min = Math.min; module.exports = function (target, start/*, end*/) { var o = validValue(this), end = arguments[2], l = toPosInt(o.length) , to, from, fin, count, direction; target = toInteger(target); start = toInteger(start); end = (end === undefined) ? l : toInteger(end); to = target < 0 ? max(l + target, 0) : min(target, l); from = start < 0 ? max(l + start, 0) : min(start, l); fin = end < 0 ? max(l + end, 0) : min(end, l); count = min(fin - from, l - to); direction = 1; if ((from < to) && (to < (from + count))) { direction = -1; from += count - 1; to += count - 1; } while (count > 0) { if (hasOwnProperty.call(o, from)) o[to] = o[from]; else delete o[from]; from += direction; to += direction; count -= 1; } return o; };