NumberBitwiseOp.js 579 B

1234567891011121314151617181920212223242526
  1. 'use strict';
  2. var GetIntrinsic = require('../GetIntrinsic');
  3. var $TypeError = GetIntrinsic('%TypeError%');
  4. var ToInt32 = require('./ToInt32');
  5. var ToUint32 = require('./ToUint32');
  6. // https://tc39.es/ecma262/2020/#sec-numberbitwiseop
  7. module.exports = function NumberBitwiseOp(op, x, y) {
  8. if (op !== '&' && op !== '|' && op !== '^') {
  9. throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`');
  10. }
  11. var lnum = ToInt32(x);
  12. var rnum = ToUint32(y);
  13. if (op === '&') {
  14. return lnum & rnum;
  15. }
  16. if (op === '|') {
  17. return lnum | rnum;
  18. }
  19. return lnum ^ rnum;
  20. };