tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 7f7402dfe6120d8880602a6cf8b1415b88010b70
parent 085dd98a3681e748fdcd48ce66aea9b01b75ae2a
Author: Iain Ireland <iireland@mozilla.com>
Date:   Thu, 13 Nov 2025 23:37:51 +0000

Bug 1998297: Use a macro for ToNumber and ToBoolean r=jandem

Drive-by: remove dead SameValueZero implementation

Differential Revision: https://phabricator.services.mozilla.com/D271332

Diffstat:
Mjs/src/builtin/Iterator.js | 12++++++------
Mjs/src/builtin/Number.js | 4++--
Mjs/src/builtin/SelfHostingDefines.h | 6++++++
Mjs/src/builtin/Utilities.js | 16----------------
Mjs/src/builtin/intl/CommonFunctions.js | 4++--
Mjs/src/builtin/intl/PluralRules.js | 6+++---
Mjs/src/builtin/intl/RelativeTimeFormat.js | 4++--
Mjs/src/tests/non262/Number/ToNumber.js | 5-----
8 files changed, 21 insertions(+), 36 deletions(-)

diff --git a/js/src/builtin/Iterator.js b/js/src/builtin/Iterator.js @@ -1672,13 +1672,13 @@ function IteratorCloseAllForException(iters) { /** * CreateNumericRangeIterator (start, end, optionOrStep, type) - * Step 18 - * + * Step 18 + * * https://tc39.es/proposal-iterator.range/#sec-create-numeric-range-iterator */ function IteratorRangeNext() { var obj = this; - // Step 18. Let closure be a new Abstract Closure with no parameters + // Step 18. Let closure be a new Abstract Closure with no parameters // that captures start, end, step, inclusiveEnd, zero, one and performs the following steps when called: if (!IsObject(obj) || (obj = GuardToIteratorRange(obj)) === null) { @@ -1728,7 +1728,7 @@ function IteratorRangeNext() { // Step 18.i.iv: If ifIncrease is true, then if (ifIncrease) { - // Step 18.i.iv.1: If inclusiveEnd is true, then + // Step 18.i.iv.1: If inclusiveEnd is true, then if (inclusiveEnd) { // Step 18.i.iv.1.a: If currentYieldingValue > end, return undefined. if (currentYieldingValue > end) { @@ -1773,7 +1773,7 @@ function IteratorRangeNext() { /** * CreateNumericRangeIterator (start, end, optionOrStep, type) - * + * * https://tc39.es/proposal-iterator.range/#sec-create-numeric-range-iterator */ function CreateNumericRangeIterator(start, end, optionOrStep, isNumberRange) { @@ -1836,7 +1836,7 @@ function CreateNumericRangeIterator(start, end, optionOrStep, isNumberRange) { step = optionOrStep.step; // Step 8.b. Set inclusiveEnd to ToBoolean(? Get(optionOrStep, "inclusive")). - inclusiveEnd = ToBoolean(optionOrStep.inclusiveEnd); + inclusiveEnd = TO_BOOLEAN(optionOrStep.inclusiveEnd); } // Step 9: Else if type is NUMBER-RANGE and optionOrStep is a Number, then else if (isNumberRange && typeof optionOrStep === 'number') { diff --git a/js/src/builtin/Number.js b/js/src/builtin/Number.js @@ -60,9 +60,9 @@ function Number_isSafeInteger(number) { } function Global_isNaN(number) { - return Number_isNaN(ToNumber(number)); + return Number_isNaN(TO_NUMBER(number)); } function Global_isFinite(number) { - return Number_isFinite(ToNumber(number)); + return Number_isFinite(TO_NUMBER(number)); } diff --git a/js/src/builtin/SelfHostingDefines.h b/js/src/builtin/SelfHostingDefines.h @@ -25,6 +25,12 @@ // simple Object (with null prototype) as a convenient implementation. #define NEW_RECORD() std_Object_create(null) +/* Spec: ECMAScript Language Specification, 5.1 edition, 9.2 and 11.4.9 */ +#define TO_BOOLEAN(v) !!v + +/* Spec: ECMAScript Language Specification, 5.1 edition, 9.3 and 11.4.6 */ +#define TO_NUMBER(v) +v + // NB: keep this in sync with the copy in vm/ArgumentsObject.h. #define MAX_ARGS_LENGTH (500 * 1000) diff --git a/js/src/builtin/Utilities.js b/js/src/builtin/Utilities.js @@ -30,22 +30,6 @@ /********** Abstract operations defined in ECMAScript Language Specification **********/ -/* Spec: ECMAScript Language Specification, 5.1 edition, 9.2 and 11.4.9 */ -function ToBoolean(v) { - return !!v; -} - -/* Spec: ECMAScript Language Specification, 5.1 edition, 9.3 and 11.4.6 */ -function ToNumber(v) { - return +v; -} - -// ES2017 draft rev aebf014403a3e641fb1622aec47c40f051943527 -// 7.2.10 SameValueZero ( x, y ) -function SameValueZero(x, y) { - return x === y || (x !== x && y !== y); -} - // ES 2017 draft (April 6, 2016) 7.3.9 function GetMethod(V, P) { // Step 1. diff --git a/js/src/builtin/intl/CommonFunctions.js b/js/src/builtin/intl/CommonFunctions.js @@ -654,7 +654,7 @@ function GetOption(options, property, type, values, fallback) { if (value !== undefined) { // Steps 2.a-c. if (type === "boolean") { - value = ToBoolean(value); + value = TO_BOOLEAN(value); } else if (type === "string") { value = ToString(value); } else { @@ -752,7 +752,7 @@ function DefaultNumberOption(value, minimum, maximum, fallback) { } // Step 2. - value = ToNumber(value); + value = TO_NUMBER(value); // Step 3. if (Number_isNaN(value) || value < minimum || value > maximum) { diff --git a/js/src/builtin/intl/PluralRules.js b/js/src/builtin/intl/PluralRules.js @@ -278,7 +278,7 @@ function Intl_PluralRules_select(value) { } // Step 3. - var n = ToNumber(value); + var n = TO_NUMBER(value); // Ensure the PluralRules internals are resolved. getPluralRulesInternals(pluralRules); @@ -325,10 +325,10 @@ function Intl_PluralRules_selectRange(start, end) { } // Step 4. - var x = ToNumber(start); + var x = TO_NUMBER(start); // Step 5. - var y = ToNumber(end); + var y = TO_NUMBER(end); // Step 6. return intl_SelectPluralRuleRange(pluralRules, x, y); diff --git a/js/src/builtin/intl/RelativeTimeFormat.js b/js/src/builtin/intl/RelativeTimeFormat.js @@ -245,7 +245,7 @@ function Intl_RelativeTimeFormat_format(value, unit) { } // Step 3. - var t = ToNumber(value); + var t = TO_NUMBER(value); // Step 4. var u = ToString(unit); @@ -282,7 +282,7 @@ function Intl_RelativeTimeFormat_formatToParts(value, unit) { } // Step 3. - var t = ToNumber(value); + var t = TO_NUMBER(value); // Step 4. var u = ToString(unit); diff --git a/js/src/tests/non262/Number/ToNumber.js b/js/src/tests/non262/Number/ToNumber.js @@ -17,10 +17,5 @@ assertEq(Number("0o88"), NaN); assertEq(Number("-0o66"), NaN); assertEq(+"0o66", 54); -if(typeof getSelfHostedValue === "function"){ - assertEq(getSelfHostedValue("ToNumber")("0b11"), 3); - assertEq(getSelfHostedValue("ToNumber")("0o66"), 54); -} - if (typeof reportCompare === "function") reportCompare(true, true);