forked from WebKit/WebKit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbigswitch-indirect-symbol-or-undefined.js
279 lines (275 loc) · 6.2 KB
/
bigswitch-indirect-symbol-or-undefined.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
var thing0 = Symbol();
var thing1 = Symbol();
var thing2 = Symbol();
var thing3 = Symbol();
var thing4 = Symbol();
var thing5 = Symbol();
var thing6 = Symbol();
var thing7 = Symbol();
var thing8 = Symbol();
var thing9 = Symbol();
var thing10 = Symbol();
var thing11 = Symbol();
var thing12 = Symbol();
var thing13 = Symbol();
var thing14 = Symbol();
var thing15 = Symbol();
var thing16 = Symbol();
var thing17 = Symbol();
var thing18 = Symbol();
var thing19 = Symbol();
var thing20 = Symbol();
var thing21 = Symbol();
var thing22 = Symbol();
var thing23 = Symbol();
var thing24 = Symbol();
var thing25 = Symbol();
var thing26 = Symbol();
var thing27 = Symbol();
var thing28 = Symbol();
var thing29 = Symbol();
var thing30 = Symbol();
var thing31 = Symbol();
var thing32 = Symbol();
var thing33 = Symbol();
var thing34 = Symbol();
var thing35 = Symbol();
var thing36 = Symbol();
var thing37 = Symbol();
var thing38 = Symbol();
var thing39 = Symbol();
var thing40 = Symbol();
var thing41 = Symbol();
var thing42 = Symbol();
var thing43 = Symbol();
var thing44 = Symbol();
var thing45 = Symbol();
var thing46 = Symbol();
var thing47 = Symbol();
var thing48 = Symbol();
var thing49 = Symbol();
var thing50 = Symbol();
var thing51 = Symbol();
var thing52 = Symbol();
var thing53 = Symbol();
var thing54 = Symbol();
var thing55 = Symbol();
var thing56 = Symbol();
var thing57 = Symbol();
var thing58 = Symbol();
var thing59 = Symbol();
var thing60 = Symbol();
var thing61 = Symbol();
var thing62 = Symbol();
var things = [];
for (var i = 0; i < 63; ++i)
things.push(eval("thing" + i));
function foo(o) {
var result = 0;
for (var i = 0; i < 1000; ++i) {
var value = things[i & 63];
switch (value) {
case thing0:
result += o.a;
break;
case thing1:
result += o.b;
break;
case thing2:
result += o.c;
break;
case thing3:
result += o.d;
break;
case thing4:
result += o.e;
break;
case thing5:
result += o.f;
break;
case thing6:
result += o.g;
break;
case thing7:
result += o.h;
break;
case thing8:
result += o.i;
break;
case thing9:
result += o.j;
break;
case thing10:
result += o.k;
break;
case thing11:
result += o.a;
break;
case thing12:
result += o.b;
break;
case thing13:
result += o.c;
break;
case thing14:
result += o.d;
break;
case thing15:
result += o.e;
break;
case thing16:
result += o.f;
break;
case thing17:
result += o.g;
break;
case thing18:
result += o.h;
break;
case thing19:
result += o.i;
break;
case thing20:
result += o.j;
break;
case thing21:
result += o.k;
break;
case thing22:
result += o.k;
break;
case thing23:
result += o.a;
break;
case thing24:
result += o.b;
break;
case thing25:
result += o.c;
break;
case thing26:
result += o.d;
break;
case thing27:
result += o.e;
break;
case thing28:
result += o.f;
break;
case thing29:
result += o.g;
break;
case thing30:
result += o.h;
break;
case thing31:
result += o.i;
break;
case thing32:
result += o.j;
break;
case thing33:
result += o.k;
break;
case thing34:
result += o.k;
break;
case thing35:
result += o.k;
break;
case thing36:
result += o.a;
break;
case thing37:
result += o.b;
break;
case thing38:
result += o.c;
break;
case thing39:
result += o.d;
break;
case thing40:
result += o.e;
break;
case thing41:
result += o.f;
break;
case thing42:
result += o.g;
break;
case thing43:
result += o.h;
break;
case thing44:
result += o.i;
break;
case thing45:
result += o.j;
break;
case thing46:
result += o.k;
break;
case thing47:
result += o.i;
break;
case thing48:
result += o.j;
break;
case thing49:
result += o.k;
break;
case thing50:
result += o.k;
break;
case thing51:
result += o.k;
break;
case thing52:
result += o.a;
break;
case thing53:
result += o.b;
break;
case thing54:
result += o.c;
break;
case thing55:
result += o.d;
break;
case thing56:
result += o.e;
break;
case thing57:
result += o.f;
break;
case thing58:
result += o.g;
break;
case thing59:
result += o.h;
break;
case thing60:
result += o.i;
break;
case thing61:
result += o.j;
break;
case thing62:
result += o.k;
break;
default:
result += o.z;
break;
}
}
return result;
}
(function() {
var o = {a:1, b:2, c:3, d:4, e:5, f:6, g:7, h:8, i:9, j:10, k:11, z:100};
var result = 0;
for (var i = 0; i < 1000; ++i)
result += foo(o);
if (result != 7966000)
throw "Error: bad result: " + result;
})();