| | |
| | | 'use strict'; |
| | | var $ = require('../internals/export'); |
| | | var uncurryThis = require('../internals/function-uncurry-this'); |
| | | var fails = require('../internals/fails'); |
| | | var ArrayBufferModule = require('../internals/array-buffer'); |
| | | var anObject = require('../internals/an-object'); |
| | |
| | | |
| | | var ArrayBuffer = ArrayBufferModule.ArrayBuffer; |
| | | var DataView = ArrayBufferModule.DataView; |
| | | var nativeArrayBufferSlice = ArrayBuffer.prototype.slice; |
| | | var DataViewPrototype = DataView.prototype; |
| | | var un$ArrayBufferSlice = uncurryThis(ArrayBuffer.prototype.slice); |
| | | var getUint8 = uncurryThis(DataViewPrototype.getUint8); |
| | | var setUint8 = uncurryThis(DataViewPrototype.setUint8); |
| | | |
| | | var INCORRECT_SLICE = fails(function () { |
| | | return !new ArrayBuffer(2).slice(1, undefined).byteLength; |
| | |
| | | // https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice |
| | | $({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, { |
| | | slice: function slice(start, end) { |
| | | if (nativeArrayBufferSlice !== undefined && end === undefined) { |
| | | return nativeArrayBufferSlice.call(anObject(this), start); // FF fix |
| | | if (un$ArrayBufferSlice && end === undefined) { |
| | | return un$ArrayBufferSlice(anObject(this), start); // FF fix |
| | | } |
| | | var length = anObject(this).byteLength; |
| | | var first = toAbsoluteIndex(start, length); |
| | |
| | | var viewTarget = new DataView(result); |
| | | var index = 0; |
| | | while (first < fin) { |
| | | viewTarget.setUint8(index++, viewSource.getUint8(first++)); |
| | | setUint8(viewTarget, index++, getUint8(viewSource, first++)); |
| | | } return result; |
| | | } |
| | | }); |