test262/implementation-contributed/javascriptcore/stress/having-a-bad-time-with-derived-arrays.js
test262-automation e9a5a7f918 [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time) (#1620)
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
2018-07-03 15:59:58 -04:00

49 lines
873 B
JavaScript

function assert(b) {
if (!b)
throw new Error;
}
let called = false;
function defineSetter() {
Array.prototype.__defineSetter__(0, function (x) {
assert(x === 42);
called = true;
});
}
class DerivedArray extends Array {
constructor(...args) {
super()
}
}
function iterate(a) {
for (let i = 0; i < a.length; i++) { }
}
let arr = [[[1, 2, 3, 4, 5], [ 2], 5], [[1, 2, 3], [ -4]]];
let d = new DerivedArray();
d[1] = 20;
d[2] = 40;
arr.push([d, [2] -9]);
function doSlice(a) {
let r = a.slice();
defineSetter();
return r;
}
for (let i = 0; i < 10000; i++) {
for (let [a, b, ...c] of arr) {
let s = doSlice(a);
iterate(s);
delete s[0];
called = false;
s[0] = 42;
if (a === d) {
assert(called);
called = false;
}
}
}