|
1 // vim: set ts=8 sts=4 et sw=4 tw=99: |
|
2 |
|
3 function f() { |
|
4 return [[], [], [], []]; |
|
5 } |
|
6 |
|
7 function setelem(obj, key, val) { |
|
8 obj[key] = val; |
|
9 } |
|
10 |
|
11 // Generate IC |
|
12 setelem([], 0, "hi"); |
|
13 setelem([], 0, "hi"); |
|
14 |
|
15 // Get some arrays pre-indexing. |
|
16 var arrays = f(); |
|
17 |
|
18 // Do bad stuff. |
|
19 Object.defineProperty(Object.prototype, "1", { set: function (v) { this.kettle = v; } }); |
|
20 |
|
21 var k = arrays[0]; |
|
22 setelem(k, 1, 13); |
|
23 assertEq(k.kettle, 13); |
|
24 assertEq(k.hasOwnProperty("1"), false); |
|
25 |
|
26 Object.defineProperty(Array.prototype, "2", { set: function (v) { this.pot = v; } }); |
|
27 k = arrays[1]; |
|
28 setelem(k, 2, "yam"); |
|
29 assertEq(k.pot, "yam"); |
|
30 |
|
31 gc(); |
|
32 |
|
33 // make sure this reset okay. |
|
34 setelem([], 0, "hi"); |
|
35 setelem([], 0, "hi"); |
|
36 |