91192fd35e520fd862798252d6e22f11b99fb9554eb54a2443995b57bf3dd899d9c422e8e798e5578bcefcb1a8ea7d89224a6be4ae124c520baed17bd3f5de 1.8 KB

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