47 lines
1.8 KiB
JavaScript
47 lines
1.8 KiB
JavaScript
|
'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);
|