d111a752035f6ad3028a6f49a89e379c69e3e29c
[WebKit-https.git] / JSTests / stress / for-in-invalidate-context-weird-assignments.js
1 function assert(b) {
2     if (!b)
3         throw new Error("Bad");
4 }
5
6 function test(f) {
7     noInline(f);
8     for (let i = 0; i < 1000; ++i)
9         f();
10 }
11
12 test(function() {
13     let o = {xx: 0};
14     for (let i in o) {
15         for (i in [0, 1, 2]) { }
16         assert(typeof i === "string");
17         assert(o[i] === undefined);
18     }
19 });
20
21 test(function() {
22     let o = {xx: 0};
23     for (let i in o) {
24         for (var i of [0]) { }
25         assert(typeof i === "number");
26         assert(o[i] === undefined);
27     }
28 });
29
30 test(function() {
31     let o = {xx: 0};
32     for (let i in o) {
33         for ({i} of [{i: 0}]) { }
34         assert(typeof i === "number");
35         assert(o[i] === undefined);
36     }
37 });
38
39 test(function() {
40     let o = {xx: 0};
41     for (let i in o) {
42         ;({i} = {i: 0});
43         assert(typeof i === "number");
44         assert(o[i] === undefined);
45     }
46 });
47
48 test(function() {
49     let o = {xx: 0};
50     for (let i in o) {
51         ;([i] = [0]);
52         assert(typeof i === "number");
53         assert(o[i] === undefined);
54     }
55 });
56
57 test(function() {
58     let o = {xx: 0};
59     for (let i in o) {
60         ;({...i} = {a:20, b:30});
61         assert(typeof i === "object");
62         assert(o[i] === undefined);
63     }
64 });
65
66 test(function() {
67     let o = {xx: 0};
68     for (let i in o) {
69         eval("i = 0;");
70         assert(typeof i === "number");
71         assert(o[i] === undefined);
72     }
73 });
74
75 test(function() {
76     let o = {xx: 0};
77     for (let i in o) {
78         var i = 0;
79         assert(typeof i === "number");
80         assert(o[i] === undefined);
81     }
82 });