commit bf333a1f6ce1ae0205ebe15bb58f8921a12333c0
parent 3564b5a8f2eabb4900d795c51c8492381e0e157a
Author: alexical <dothayer@mozilla.com>
Date: Tue, 25 Nov 2025 17:56:18 +0000
Bug 2002089 - Fix iterator indices tests for Object.keys r=iain
Differential Revision: https://phabricator.services.mozilla.com/D273887
Diffstat:
9 files changed, 47 insertions(+), 20 deletions(-)
diff --git a/js/src/jit-test/tests/ion/iterator-indices-1.js b/js/src/jit-test/tests/ion/iterator-indices-1.js
@@ -10,7 +10,9 @@ function test(obj, expected) {
function test2(obj, expected) {
var count = 0;
- for (var s of Object.keys(obj)) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ var s = keys[i];
if (obj.hasOwnProperty(s)) {
count++;
}
diff --git a/js/src/jit-test/tests/ion/iterator-indices-2.js b/js/src/jit-test/tests/ion/iterator-indices-2.js
@@ -8,7 +8,9 @@ function test(obj, expected) {
function test2(obj, expected) {
var count = 0;
- for (var s of Object.keys(obj)) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ var s = keys[i];
if (obj.hasOwnProperty(s)) {
count++;
}
diff --git a/js/src/jit-test/tests/ion/iterator-indices-3.js b/js/src/jit-test/tests/ion/iterator-indices-3.js
@@ -10,7 +10,9 @@ function test(o, deleter) {
function test2(o, deleter) {
var result = 0;
- for (var s of Object.keys(o)) {
+ var keys = Object.keys(o);
+ for (var i = 0; i < keys.length; i++) {
+ var s = keys[i];
if (!o.hasOwnProperty(s)) { continue; }
result += o[s];
deleter(o);
@@ -37,6 +39,7 @@ assertEq(test([1,2], (o) => {o.length = 0}), 1);
assertEq(test({x: 1, y: 2, z: 3}, (o) => delete o.y), 4);
assertEq(test([1,2,3], (o) => delete o[1]), 4);
assertEq(test([1,2,3,4], (o) => {o.length = 2}), 3);
+assertEq(test([,2,3], (o) => o.reverse()), 2);
assertEq(test({x: 1, y: 2, z: 3}, (o) => delete o.x), 6);
assertEq(test([1,2,3], (o) => delete o[0]), 6);
@@ -49,6 +52,7 @@ assertEq(test2([1,2], (o) => {o.length = 0}), 1);
assertEq(test2({x: 1, y: 2, z: 3}, (o) => delete o.y), 4);
assertEq(test2([1,2,3], (o) => delete o[1]), 4);
assertEq(test2([1,2,3,4], (o) => {o.length = 2}), 3);
+assertEq(test2([,2,3], (o) => o.reverse()), 2);
assertEq(test2({x: 1, y: 2, z: 3}, (o) => delete o.x), 6);
assertEq(test2([1,2,3], (o) => delete o[0]), 6);
diff --git a/js/src/jit-test/tests/ion/iterator-indices-4.js b/js/src/jit-test/tests/ion/iterator-indices-4.js
@@ -7,7 +7,9 @@ function foo(obj) {
}
function foo2(obj) {
- for (var key of Object.keys(obj)) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
assertEq(id(obj[key]), obj[key]);
}
}
diff --git a/js/src/jit-test/tests/ion/iterator-indices-5.js b/js/src/jit-test/tests/ion/iterator-indices-5.js
@@ -18,9 +18,11 @@ function foo(o, trigger) {
function foo2(o, trigger) {
var result;
- for (var key of Object.keys(o)) {
- result = o[key];
- bar(o, trigger);
+ var keys = Object.keys(o);
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ result = o[key];
+ bar(o, trigger);
}
return result;
}
diff --git a/js/src/jit-test/tests/ion/iterator-indices-6.js b/js/src/jit-test/tests/ion/iterator-indices-6.js
@@ -17,14 +17,19 @@ function test(o1, o2) {
function test2(o1, o2) {
var count = 0;
- for (var s1 of Object.keys(o1)) {
- for (var s2 of Object.keys(o2)) {
- if (Object.hasOwn(o1, s1)) {
- count += o1[s1];
- }
- if (Object.hasOwn(o2, s2)) {
- count += o2[s2];
- }
+ var keys1 = Object.keys(o1);
+ for (var i = 0; i < keys1.length; i++) {
+ var s1 = keys1[i];
+
+ var keys2 = Object.keys(o2);
+ for (var j = 0; j < keys2.length; j++) {
+ var s2 = keys2[i];
+ if (Object.hasOwn(o1, s1)) {
+ count += o1[s1];
+ }
+ if (Object.hasOwn(o2, s2)) {
+ count += o2[s2];
+ }
}
}
assertEq(count, 2);
diff --git a/js/src/jit-test/tests/ion/iterator-indices-7.js b/js/src/jit-test/tests/ion/iterator-indices-7.js
@@ -7,7 +7,9 @@ function test(obj, expected) {
}
function test2(obj, expected) {
var actual = 0;
- for (var s of Object.keys(obj)) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ var s = keys[i];
actual += obj[s];
}
assertEq(actual, expected);
diff --git a/js/src/jit-test/tests/ion/iterator-indices-8.js b/js/src/jit-test/tests/ion/iterator-indices-8.js
@@ -13,12 +13,16 @@ function test(obj) {
}
function test2(obj) {
let index = 0;
- for (var s of Object.keys(obj)) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ var s = keys[i];
obj[s] = index;
index++;
}
index = 0;
- for (var s of Object.keys(obj)) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ var s = keys[i];
assertEq(obj[s], index);
index++;
}
diff --git a/js/src/jit-test/tests/ion/iterator-indices-9.js b/js/src/jit-test/tests/ion/iterator-indices-9.js
@@ -18,14 +18,18 @@ function test(obj) {
function test2(obj) {
let index = 0;
- for (var s of Object.keys(obj)) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ var s = keys[i];
if (s.startsWith("test")) {
obj[s] = index;
}
index++;
}
index = 0;
- for (var s of Object.keys(obj)) {
+ var keys = Object.keys(obj);
+ for (var i = 0; i < keys.length; i++) {
+ var s = keys[i];
if (s.startsWith("test")) {
assertEq(obj[s], index);
}