| Server IP : 146.190.157.162 / Your IP : 216.73.217.6 Web Server : Apache System : Linux ubuntu-s-2vcpu-4gb-amd-sfo3-01-KIT-DIGITAL 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 7 15:10:09 UTC 2024 x86_64 User : businessweek ( 639) PHP Version : 8.2.10-2ubuntu2.2 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_signal,pcntl_signal_dispatch,pcntl_getpriority,pcntl_setpriority,dl,putenv,parse_ini_file,show_source MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /usr/share/nodejs/es-abstract/2022/ |
Upload File : |
'use strict';
var GetIntrinsic = require('get-intrinsic');
var $TypeError = GetIntrinsic('%TypeError%');
var HasOwnProperty = require('./HasOwnProperty');
var ToNumeric = require('./ToNumeric');
var ToPrimitive = require('./ToPrimitive');
var ToString = require('./ToString');
var Type = require('./Type');
var NumberAdd = require('./Number/add');
var NumberBitwiseAND = require('./Number/bitwiseAND');
var NumberBitwiseOR = require('./Number/bitwiseOR');
var NumberBitwiseXOR = require('./Number/bitwiseXOR');
var NumberDivide = require('./Number/divide');
var NumberExponentiate = require('./Number/exponentiate');
var NumberLeftShift = require('./Number/leftShift');
var NumberMultiply = require('./Number/multiply');
var NumberRemainder = require('./Number/remainder');
var NumberSignedRightShift = require('./Number/signedRightShift');
var NumberSubtract = require('./Number/subtract');
var NumberUnsignedRightShift = require('./Number/unsignedRightShift');
var BigIntAdd = require('./BigInt/add');
var BigIntBitwiseAND = require('./BigInt/bitwiseAND');
var BigIntBitwiseOR = require('./BigInt/bitwiseOR');
var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR');
var BigIntDivide = require('./BigInt/divide');
var BigIntExponentiate = require('./BigInt/exponentiate');
var BigIntLeftShift = require('./BigInt/leftShift');
var BigIntMultiply = require('./BigInt/multiply');
var BigIntRemainder = require('./BigInt/remainder');
var BigIntSignedRightShift = require('./BigInt/signedRightShift');
var BigIntSubtract = require('./BigInt/subtract');
var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift');
// https://ecma-international.org/ecma-262/12.0/#sec-applystringornumericbinaryoperator
// https://ecma-international.org/ecma-262/12.0/#step-applystringornumericbinaryoperator-operations-table
var table = {
'**': [NumberExponentiate, BigIntExponentiate],
'*': [NumberMultiply, BigIntMultiply],
'/': [NumberDivide, BigIntDivide],
'%': [NumberRemainder, BigIntRemainder],
'+': [NumberAdd, BigIntAdd],
'-': [NumberSubtract, BigIntSubtract],
'<<': [NumberLeftShift, BigIntLeftShift],
'>>': [NumberSignedRightShift, BigIntSignedRightShift],
'>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift],
'&': [NumberBitwiseAND, BigIntBitwiseAND],
'^': [NumberBitwiseXOR, BigIntBitwiseXOR],
'|': [NumberBitwiseOR, BigIntBitwiseOR]
};
module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) {
if (Type(opText) !== 'String' || !HasOwnProperty(table, opText)) {
throw new $TypeError('Assertion failed: `opText` must be a valid operation string');
}
if (opText === '+') {
var lprim = ToPrimitive(lval);
var rprim = ToPrimitive(rval);
if (Type(lprim) === 'String' || Type(rprim) === 'String') {
var lstr = ToString(lprim);
var rstr = ToString(rprim);
return lstr + rstr;
}
/* eslint no-param-reassign: 1 */
lval = lprim;
rval = rprim;
}
var lnum = ToNumeric(lval);
var rnum = ToNumeric(rval);
var T = Type(lnum);
if (T !== Type(rnum)) {
throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ');
}
var Operation = table[opText][T === 'BigInt' ? 1 : 0];
return Operation(lnum, rnum);
};