2 var $export = require('./_export')
3 , $typed = require('./_typed')
4 , buffer = require('./_typed-buffer')
5 , anObject = require('./_an-object')
6 , toIndex = require('./_to-index')
7 , toLength = require('./_to-length')
8 , isObject = require('./_is-object')
9 , ArrayBuffer = require('./_global').ArrayBuffer
10 , speciesConstructor = require('./_species-constructor')
11 , $ArrayBuffer = buffer.ArrayBuffer
12 , $DataView = buffer.DataView
13 , $isView = $typed.ABV && ArrayBuffer.isView
14 , $slice = $ArrayBuffer.prototype.slice
16 , ARRAY_BUFFER = 'ArrayBuffer';
18 $export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});
20 $export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {
21 // 24.1.3.1 ArrayBuffer.isView(arg)
22 isView: function isView(it){
23 return $isView && $isView(it) || isObject(it) && VIEW in it;
27 $export($export.P + $export.U + $export.F * require('./_fails')(function(){
28 return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
30 // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
31 slice: function slice(start, end){
32 if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix
33 var len = anObject(this).byteLength
34 , first = toIndex(start, len)
35 , final = toIndex(end === undefined ? len : end, len)
36 , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))
37 , viewS = new $DataView(this)
38 , viewT = new $DataView(result)
41 viewT.setUint8(index++, viewS.getUint8(first++));
46 require('./_set-species')(ARRAY_BUFFER);