Permalink
Cannot retrieve contributors at this time
84 lines (64 sloc)
2.61 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/arraybuffer.prototype.slice/implementation.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var GetIntrinsic = require('get-intrinsic'); | |
var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); | |
var $TypeError = GetIntrinsic('%TypeError%'); | |
var $Uint8Array = GetIntrinsic('%Uint8Array%', true); | |
var IsDetachedBuffer = require('es-abstract/2022/IsDetachedBuffer'); | |
var IsSharedArrayBuffer = require('es-abstract/2022/IsSharedArrayBuffer'); | |
var max = require('es-abstract/2022/max'); | |
var min = require('es-abstract/2022/min'); | |
var SpeciesConstructor = require('es-abstract/2022/SpeciesConstructor'); | |
var ToIntegerOrInfinity = require('es-abstract/2022/ToIntegerOrInfinity'); | |
var arrayBufferByteLength = require('array-buffer-byte-length'); | |
var isArrayBuffer = require('is-array-buffer'); | |
module.exports = function slice(start, end) { | |
var O = this; // step 1 | |
if (!isArrayBuffer(O) || IsSharedArrayBuffer(O) || IsDetachedBuffer(O)) { | |
throw new $TypeError('receiver must be a non-detached, non-shared ArrayBuffer'); // steps 2-4 | |
} | |
var len = arrayBufferByteLength(O); // step 5 | |
var relativeStart = ToIntegerOrInfinity(start); // step 6 | |
var first; | |
if (relativeStart === -Infinity) { | |
first = 0; // step 7 | |
} else if (relativeStart < 0) { | |
first = max(len + relativeStart, 0); // step 8 | |
} else { | |
first = min(relativeStart, len); // step 9 | |
} | |
var relativeEnd = typeof end === 'undefined' ? len : ToIntegerOrInfinity(end); // step 10 | |
var final; | |
if (relativeEnd === -Infinity) { | |
final = 0; // step 11 | |
} else if (relativeEnd < 0) { | |
final = max(len + relativeEnd, 0); // step 12 | |
} else { | |
final = min(relativeEnd, len); // step 13 | |
} | |
var newLen = max(final - first, 0); // step 14 | |
var Ctor = SpeciesConstructor(O, $ArrayBuffer); // step 15 | |
var new$ = new Ctor(newLen); // step 16 | |
if (!isArrayBuffer(new$) || IsSharedArrayBuffer(new$) || IsDetachedBuffer(new$)) { | |
throw new $TypeError('Species constructor must produce a non-detached, non-shared Array Buffer'); // steps 17-19 | |
} | |
if (new$ === O) { | |
throw new $TypeError('new ArrayBuffer should not have been the same as the receiver'); // step 20 | |
} | |
if (arrayBufferByteLength(new$) < newLen) { | |
throw new $TypeError('new ArrayBuffer\'s byteLength must be at least the requested length'); // step 21 | |
} | |
if (IsDetachedBuffer(O)) { | |
throw new $TypeError('receiver became an detached ArrayBuffer'); // step 23 | |
} | |
/* | |
24. Let fromBuf be O.[[ArrayBufferData]]. | |
25. Let toBuf be new.[[ArrayBufferData]]. | |
26. Perform CopyDataBlockBytes(toBuf, 0, fromBuf, first, newLen). | |
*/ | |
var sourceArr = new $Uint8Array(O); | |
var destArr = new $Uint8Array(new$); | |
for (var i = start, ii = 0; i < end; i++, ii++) { | |
destArr[ii] = sourceArr[i]; | |
} | |
return new$; // step 27 | |
}; |