Ensure that ForInContexts are invalidated if their loop local is over-written.
[WebKit-https.git] / JSTests / stress / regress-189571.js
1 function assert(name, actual, expected) {
2     if (actual != expected) {
3         print("FAILED test " + name + ": expected " + expected + ", actual: " + actual);
4         throw "FAILED";
5     }
6 }
7
8 function checkResult(name, result, expectedK, expectedProp) {
9     assert(name, result[0], expectedK);
10     assert(name, result[1], expectedProp);
11 }
12
13 // ForIn on Indexed properties.
14
15 function testIndexedProperties(o) {
16     for (var k in o) {
17         {
18             function k() { }
19         }
20         return [ k, o[k] ];
21     }
22 }
23
24 var o = [42];
25 for (var i = 0; i < 10000; ++i) {
26     var result = testIndexedProperties(o);
27     checkResult("testIndexedProperties", result, "function k() { }", undefined);
28 }
29
30 function testIndexedProperties2(o) {
31     for (var k in o) {
32         {
33             k = "boo";
34             function k() { }
35         }
36         return [ k, o[k] ];
37     }
38 }
39
40 var o = [42];
41 for (var i = 0; i < 10000; ++i) {
42     var result = testIndexedProperties2(o);
43     checkResult("testIndexedProperties2", result, "boo", undefined);
44 }
45
46 function testIndexedProperties3(o) {
47     for (var k in o) {
48         try {
49         } finally {
50             {
51                 function k() { }
52             }
53         }
54         return [ k, o[k] ];
55     }
56 }
57
58 var o = [42];
59 for (var i = 0; i < 10000; ++i) {
60     var result = testIndexedProperties3(o);
61     checkResult("testIndexedProperties3", result, "function k() { }", undefined);
62 }
63
64 function testIndexedProperties4(o) {
65     for (var k in o) {
66         try {
67         } finally {
68             {
69                 k = "boo";
70                 function k() { }
71             }
72         }
73         return [ k, o[k] ];
74     }
75 }
76
77 var o = [42];
78 for (var i = 0; i < 10000; ++i) {
79     var result = testIndexedProperties4(o);
80     checkResult("testIndexedProperties4", result, "boo", undefined);
81 }
82
83 // ForIn on Structure properties.
84
85 function testStructureProperties(o) {
86     for (var k in o) {
87         {
88             function k() { }
89         }
90         return [ k, o[k] ];
91     }
92 }
93
94 var o = {a: 42};
95 for (var i = 0; i < 10000; ++i) {
96     var result = testStructureProperties(o);
97     checkResult("testStructureProperties", result, "function k() { }", undefined);
98 }
99
100 function testStructureProperties2(o) {
101     for (var k in o) {
102         {
103             k = 0x1234;
104             function k() { }
105         }
106         return [ k, o[k] ];
107     }
108 }
109
110 var o = {a: 42};
111 for (var i = 0; i < 10000; ++i) {
112     var result = testStructureProperties2(o);
113     checkResult("testStructureProperties2", result, 0x1234, undefined);
114 }
115
116 function testStructureProperties3(o) {
117     for (var k in o) {
118         try {
119         } finally {
120             {
121                 function k() { }
122             }
123         }
124         return [ k, o[k] ];
125     }
126 }
127
128 var o = {a: 42};
129 for (var i = 0; i < 10000; ++i) {
130     var result = testStructureProperties3(o);
131     checkResult("testStructureProperties3", result, "function k() { }", undefined);
132 }
133
134 function testStructureProperties4(o) {
135     for (var k in o) {
136         try {
137         } finally {
138             {
139                 k = 0x1234;
140                 function k() { }
141             }
142         }
143         return [ k, o[k] ];
144     }
145 }
146
147 var o = {a: 42};
148 for (var i = 0; i < 10000; ++i) {
149     var result = testStructureProperties4(o);
150     checkResult("testStructureProperties4", result, 0x1234, undefined);
151 }