/
drndsv
/
react
Обзор
Документация
Войти
/
drndsv
/
react
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
node_modules/es-abstract/2021/BigIntBitwiseOp.js
66 строк
2 KB
drndsv
Initial commit
14 апр 2025, 22:53
14 апр 2025, 22:53
641ac8a
Код
Авторство
О чём код?
'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = GetIntrinsic('%TypeError%'); // var $BigInt = GetIntrinsic('%BigInt%', true); // var $pow = GetIntrinsic('%Math.pow%'); // var BinaryAnd = require('./BinaryAnd'); // var BinaryOr = require('./BinaryOr'); // var BinaryXor = require('./BinaryXor'); var Type = require('./Type'); // var modulo = require('./modulo'); // var zero = $BigInt && $BigInt(0); // var negOne = $BigInt && $BigInt(-1); // var two = $BigInt && $BigInt(2); // https://262.ecma-international.org/11.0/#sec-bigintbitwiseop module.exports = function BigIntBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') { throw new $TypeError('`x` and `y` must be BigInts'); } if (op === '&') { return x & y; } if (op === '|') { return x | y; } return x ^ y; /* var result = zero; var shift = 0; while (x !== zero && x !== negOne && y !== zero && y !== negOne) { var xDigit = modulo(x, two); var yDigit = modulo(y, two); if (op === '&') { result += $pow(2, shift) * BinaryAnd(xDigit, yDigit); } else if (op === '|') { result += $pow(2, shift) * BinaryOr(xDigit, yDigit); } else if (op === '^') { result += $pow(2, shift) * BinaryXor(xDigit, yDigit); } shift += 1; x = (x - xDigit) / two; y = (y - yDigit) / two; } var tmp; if (op === '&') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else if (op === '|') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else { tmp = BinaryXor(modulo(x, two), modulo(y, two)); } if (tmp !== 0) { result -= $pow(2, shift); } return result; */ };