1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 'use strict';
- var GetIntrinsic = require('get-intrinsic');
- var callBound = require('call-bind/callBound');
- var $TypeError = GetIntrinsic('%TypeError%');
- var $push = callBound('Array.prototype.push');
- var IsArray = require('./IsArray');
- var isByteValue = require('../helpers/isByteValue');
- // https://ecma-international.org/ecma-262/12.0/#sec-bytelistbitwiseop
- module.exports = function ByteListBitwiseOp(op, xBytes, yBytes) {
- if (op !== '&' && op !== '^' && op !== '|') {
- throw new $TypeError('Assertion failed: `op` must be `&`, `^`, or `|`');
- }
- if (!IsArray(xBytes) || !IsArray(yBytes) || xBytes.length !== yBytes.length) {
- throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)');
- }
- var result = [];
- for (var i = 0; i < xBytes.length; i += 1) {
- var xByte = xBytes[i];
- var yByte = yBytes[i];
- if (!isByteValue(xByte) || !isByteValue(yByte)) {
- throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)');
- }
- var resultByte;
- if (op === '&') {
- resultByte = xByte & yByte;
- } else if (op === '^') {
- resultByte = xByte ^ yByte;
- } else {
- resultByte = xByte | yByte;
- }
- $push(result, resultByte);
- }
- return result;
- };
|