| // This tests that the lazy watchpoints we set for Symbol.species in our Builtin arrayPrototype functions work. |
| |
| |
| function test(array) { |
| array = array.splice(2, 2); |
| array = array.slice(0, 5); |
| array = array.concat([1,2,3]); |
| return array; |
| } |
| noInline(test); |
| |
| function arrayEq(a, b) { |
| if (a.length !== b.length) |
| throw new Error(); |
| |
| for (let i = 0; i < a.length; i++) { |
| if (a[i] !== b[i]) |
| throw new Error(); |
| } |
| } |
| |
| for (let i = 0; i < 100; i++) |
| arrayEq(test([1,2,3,4,5,6,7,8,9]), [3,4,1,2,3]); |
| |
| class A extends Array { } |
| |
| for (let i = 0; i < 100; i++) { |
| let result = test(new A(1,2,3,4,5,6,7,8,9)); |
| arrayEq(result, [3,4,1,2,3]); |
| if (!(result instanceof A)) |
| throw new Error(); |
| } |
| |
| for (let i = 0; i < 100; i++) |
| arrayEq(test([1,2,3,4,5,6,7,8,9]), [3,4,1,2,3]); |
| |
| delete Array.prototype.sort; |
| |
| for (let i = 0; i < 100; i++) |
| arrayEq(test([1,2,3,4,5,6,7,8,9]), [3,4,1,2,3]); |
| |
| for (let i = 0; i < 100; i++) { |
| let result = test(new A(1,2,3,4,5,6,7,8,9)); |
| arrayEq(result, [3,4,1,2,3]); |
| if (!(result instanceof A)) |
| throw new Error(); |
| } |