| 'use strict'; |
| var $export = require('./_export'); |
| var $typed = require('./_typed'); |
| var buffer = require('./_typed-buffer'); |
| var anObject = require('./_an-object'); |
| var toAbsoluteIndex = require('./_to-absolute-index'); |
| var toLength = require('./_to-length'); |
| var isObject = require('./_is-object'); |
| var ArrayBuffer = require('./_global').ArrayBuffer; |
| var speciesConstructor = require('./_species-constructor'); |
| var $ArrayBuffer = buffer.ArrayBuffer; |
| var $DataView = buffer.DataView; |
| var $isView = $typed.ABV && ArrayBuffer.isView; |
| var $slice = $ArrayBuffer.prototype.slice; |
| var VIEW = $typed.VIEW; |
| var ARRAY_BUFFER = 'ArrayBuffer'; |
| |
| $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer }); |
| |
| $export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, { |
| // 24.1.3.1 ArrayBuffer.isView(arg) |
| isView: function isView(it) { |
| return $isView && $isView(it) || isObject(it) && VIEW in it; |
| } |
| }); |
| |
| $export($export.P + $export.U + $export.F * require('./_fails')(function () { |
| return !new $ArrayBuffer(2).slice(1, undefined).byteLength; |
| }), ARRAY_BUFFER, { |
| // 24.1.4.3 ArrayBuffer.prototype.slice(start, end) |
| slice: function slice(start, end) { |
| if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix |
| var len = anObject(this).byteLength; |
| var first = toAbsoluteIndex(start, len); |
| var fin = toAbsoluteIndex(end === undefined ? len : end, len); |
| var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first)); |
| var viewS = new $DataView(this); |
| var viewT = new $DataView(result); |
| var index = 0; |
| while (first < fin) { |
| viewT.setUint8(index++, viewS.getUint8(first++)); |
| } return result; |
| } |
| }); |
| |
| require('./_set-species')(ARRAY_BUFFER); |