Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: test/mjsunit/es6/tail-call-megatest.js

Issue 1709583002: [turbofan] Fixing ES6 tail calls in Turbofan. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Flags: --allow-natives-syntax --harmony-tailcalls --no-turbo-inlining
6
7 //
8 // This is an auto-generated file. Do not modify.
9 // See test/mjsunit/es6/tail-call-mega-generator.js for details.
10 //
11 "use strict";
12
13 Error.prepareStackTrace = (error,stack) => {
14 error.strace = stack;
15 return error.message + "\n at " + stack.join("\n at ");
16 }
17
18
19 function CheckStackTrace(expected) {
20 var e = new Error();
21 e.stack; // prepare stack trace
22 var stack = e.strace;
23 assertEquals("CheckStackTrace", stack[0].getFunctionName());
24 for (var i = 0; i < expected.length; i++) {
25 assertEquals(expected[i].name, stack[i + 1].getFunctionName());
26 }
27 // Don't inline. Don't inline. Don't inline. Don't inline.
28 // Don't inline. Don't inline. Don't inline. Don't inline.
29 // Don't inline. Don't inline. Don't inline. Don't inline.
30 // Don't inline. Don't inline. Don't inline. Don't inline.
31 // Don't inline. Don't inline. Don't inline. Don't inline.
32 // Don't inline. Don't inline. Don't inline. Don't inline.
33 // Don't inline. Don't inline. Don't inline. Don't inline.
34 // Don't inline. Don't inline. Don't inline. Don't inline.
35 // Don't inline. Don't inline. Don't inline. Don't inline.
36 // Don't inline. Don't inline. Don't inline. Don't inline.
37 // Don't inline. Don't inline. Don't inline. Don't inline.
38 // Don't inline. Don't inline. Don't inline. Don't inline.
39 // Don't inline. Don't inline. Don't inline. Don't inline.
40 // Don't inline. Don't inline. Don't inline. Don't inline.
41 // Don't inline. Don't inline. Don't inline. Don't inline.
42 // Don't inline. Don't inline. Don't inline. Don't inline.
43 }
44
45 function CheckArguments(expected, args) {
46 args = Array.prototype.slice.call(args);
47 assertEquals(expected, args);
48 // Don't inline. Don't inline. Don't inline. Don't inline.
49 // Don't inline. Don't inline. Don't inline. Don't inline.
50 // Don't inline. Don't inline. Don't inline. Don't inline.
51 // Don't inline. Don't inline. Don't inline. Don't inline.
52 // Don't inline. Don't inline. Don't inline. Don't inline.
53 // Don't inline. Don't inline. Don't inline. Don't inline.
54 // Don't inline. Don't inline. Don't inline. Don't inline.
55 // Don't inline. Don't inline. Don't inline. Don't inline.
56 // Don't inline. Don't inline. Don't inline. Don't inline.
57 // Don't inline. Don't inline. Don't inline. Don't inline.
58 // Don't inline. Don't inline. Don't inline. Don't inline.
59 // Don't inline. Don't inline. Don't inline. Don't inline.
60 // Don't inline. Don't inline. Don't inline. Don't inline.
61 // Don't inline. Don't inline. Don't inline. Don't inline.
62 // Don't inline. Don't inline. Don't inline. Don't inline.
63 // Don't inline. Don't inline. Don't inline. Don't inline.
64 }
65
66
67 (function() {
68 function f(a) {
69 // Don't inline. Don't inline. Don't inline. Don't inline.
70 // Don't inline. Don't inline. Don't inline. Don't inline.
71 // Don't inline. Don't inline. Don't inline. Don't inline.
72 // Don't inline. Don't inline. Don't inline. Don't inline.
73 // Don't inline. Don't inline. Don't inline. Don't inline.
74 // Don't inline. Don't inline. Don't inline. Don't inline.
75 // Don't inline. Don't inline. Don't inline. Don't inline.
76 // Don't inline. Don't inline. Don't inline. Don't inline.
77 // Don't inline. Don't inline. Don't inline. Don't inline.
78 // Don't inline. Don't inline. Don't inline. Don't inline.
79 // Don't inline. Don't inline. Don't inline. Don't inline.
80 // Don't inline. Don't inline. Don't inline. Don't inline.
81 // Don't inline. Don't inline. Don't inline. Don't inline.
82 // Don't inline. Don't inline. Don't inline. Don't inline.
83 // Don't inline. Don't inline. Don't inline. Don't inline.
84 // Don't inline. Don't inline. Don't inline. Don't inline.
85 assertEquals(undefined, this);
86 CheckArguments([], arguments);
87 CheckStackTrace([f, test]);
88 %DeoptimizeNow();
89 CheckArguments([], arguments);
90 CheckStackTrace([f, test]);
91 return 42;
92 }
93 function g(a) {
94 // Let it be inlined.
95 CheckArguments([10], arguments);
96 return f();
97 }
98 function test() {
99 assertEquals(42, g(10));
100 }
101 ;
102 %SetForceInlineFlag(g);
103
104 test();
105 %OptimizeFunctionOnNextCall(test);
106 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
107 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
108 %OptimizeFunctionOnNextCall(g);
109 test();
110 })();
111
112 (function() {
113 function f(a) {
114 // Don't inline. Don't inline. Don't inline. Don't inline.
115 // Don't inline. Don't inline. Don't inline. Don't inline.
116 // Don't inline. Don't inline. Don't inline. Don't inline.
117 // Don't inline. Don't inline. Don't inline. Don't inline.
118 // Don't inline. Don't inline. Don't inline. Don't inline.
119 // Don't inline. Don't inline. Don't inline. Don't inline.
120 // Don't inline. Don't inline. Don't inline. Don't inline.
121 // Don't inline. Don't inline. Don't inline. Don't inline.
122 // Don't inline. Don't inline. Don't inline. Don't inline.
123 // Don't inline. Don't inline. Don't inline. Don't inline.
124 // Don't inline. Don't inline. Don't inline. Don't inline.
125 // Don't inline. Don't inline. Don't inline. Don't inline.
126 // Don't inline. Don't inline. Don't inline. Don't inline.
127 // Don't inline. Don't inline. Don't inline. Don't inline.
128 // Don't inline. Don't inline. Don't inline. Don't inline.
129 // Don't inline. Don't inline. Don't inline. Don't inline.
130 assertEquals(undefined, this);
131 CheckArguments([], arguments);
132 CheckStackTrace([f, test]);
133 %DeoptimizeNow();
134 CheckArguments([], arguments);
135 CheckStackTrace([f, test]);
136 return 42;
137 }
138 function g(a) {
139 // Don't inline. Don't inline. Don't inline. Don't inline.
140 // Don't inline. Don't inline. Don't inline. Don't inline.
141 // Don't inline. Don't inline. Don't inline. Don't inline.
142 // Don't inline. Don't inline. Don't inline. Don't inline.
143 // Don't inline. Don't inline. Don't inline. Don't inline.
144 // Don't inline. Don't inline. Don't inline. Don't inline.
145 // Don't inline. Don't inline. Don't inline. Don't inline.
146 // Don't inline. Don't inline. Don't inline. Don't inline.
147 // Don't inline. Don't inline. Don't inline. Don't inline.
148 // Don't inline. Don't inline. Don't inline. Don't inline.
149 // Don't inline. Don't inline. Don't inline. Don't inline.
150 // Don't inline. Don't inline. Don't inline. Don't inline.
151 // Don't inline. Don't inline. Don't inline. Don't inline.
152 // Don't inline. Don't inline. Don't inline. Don't inline.
153 // Don't inline. Don't inline. Don't inline. Don't inline.
154 // Don't inline. Don't inline. Don't inline. Don't inline.
155 CheckArguments([10], arguments);
156 return f();
157 }
158 function test() {
159 assertEquals(42, g(10));
160 }
161 ;
162 ;
163
164 test();
165 %OptimizeFunctionOnNextCall(test);
166 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
167 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
168 %OptimizeFunctionOnNextCall(g);
169 test();
170 })();
171
172 (function() {
173 function f(a) {
174 // Don't inline. Don't inline. Don't inline. Don't inline.
175 // Don't inline. Don't inline. Don't inline. Don't inline.
176 // Don't inline. Don't inline. Don't inline. Don't inline.
177 // Don't inline. Don't inline. Don't inline. Don't inline.
178 // Don't inline. Don't inline. Don't inline. Don't inline.
179 // Don't inline. Don't inline. Don't inline. Don't inline.
180 // Don't inline. Don't inline. Don't inline. Don't inline.
181 // Don't inline. Don't inline. Don't inline. Don't inline.
182 // Don't inline. Don't inline. Don't inline. Don't inline.
183 // Don't inline. Don't inline. Don't inline. Don't inline.
184 // Don't inline. Don't inline. Don't inline. Don't inline.
185 // Don't inline. Don't inline. Don't inline. Don't inline.
186 // Don't inline. Don't inline. Don't inline. Don't inline.
187 // Don't inline. Don't inline. Don't inline. Don't inline.
188 // Don't inline. Don't inline. Don't inline. Don't inline.
189 // Don't inline. Don't inline. Don't inline. Don't inline.
190 assertEquals(undefined, this);
191 CheckArguments([1], arguments);
192 CheckStackTrace([f, test]);
193 %DeoptimizeNow();
194 CheckArguments([1], arguments);
195 CheckStackTrace([f, test]);
196 return 42;
197 }
198 function g(a) {
199 // Let it be inlined.
200 CheckArguments([10], arguments);
201 return f(1);
202 }
203 function test() {
204 assertEquals(42, g(10));
205 }
206 ;
207 %SetForceInlineFlag(g);
208
209 test();
210 %OptimizeFunctionOnNextCall(test);
211 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
212 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
213 %OptimizeFunctionOnNextCall(g);
214 test();
215 })();
216
217 (function() {
218 function f(a) {
219 // Don't inline. Don't inline. Don't inline. Don't inline.
220 // Don't inline. Don't inline. Don't inline. Don't inline.
221 // Don't inline. Don't inline. Don't inline. Don't inline.
222 // Don't inline. Don't inline. Don't inline. Don't inline.
223 // Don't inline. Don't inline. Don't inline. Don't inline.
224 // Don't inline. Don't inline. Don't inline. Don't inline.
225 // Don't inline. Don't inline. Don't inline. Don't inline.
226 // Don't inline. Don't inline. Don't inline. Don't inline.
227 // Don't inline. Don't inline. Don't inline. Don't inline.
228 // Don't inline. Don't inline. Don't inline. Don't inline.
229 // Don't inline. Don't inline. Don't inline. Don't inline.
230 // Don't inline. Don't inline. Don't inline. Don't inline.
231 // Don't inline. Don't inline. Don't inline. Don't inline.
232 // Don't inline. Don't inline. Don't inline. Don't inline.
233 // Don't inline. Don't inline. Don't inline. Don't inline.
234 // Don't inline. Don't inline. Don't inline. Don't inline.
235 assertEquals(undefined, this);
236 CheckArguments([1], arguments);
237 CheckStackTrace([f, test]);
238 %DeoptimizeNow();
239 CheckArguments([1], arguments);
240 CheckStackTrace([f, test]);
241 return 42;
242 }
243 function g(a) {
244 // Don't inline. Don't inline. Don't inline. Don't inline.
245 // Don't inline. Don't inline. Don't inline. Don't inline.
246 // Don't inline. Don't inline. Don't inline. Don't inline.
247 // Don't inline. Don't inline. Don't inline. Don't inline.
248 // Don't inline. Don't inline. Don't inline. Don't inline.
249 // Don't inline. Don't inline. Don't inline. Don't inline.
250 // Don't inline. Don't inline. Don't inline. Don't inline.
251 // Don't inline. Don't inline. Don't inline. Don't inline.
252 // Don't inline. Don't inline. Don't inline. Don't inline.
253 // Don't inline. Don't inline. Don't inline. Don't inline.
254 // Don't inline. Don't inline. Don't inline. Don't inline.
255 // Don't inline. Don't inline. Don't inline. Don't inline.
256 // Don't inline. Don't inline. Don't inline. Don't inline.
257 // Don't inline. Don't inline. Don't inline. Don't inline.
258 // Don't inline. Don't inline. Don't inline. Don't inline.
259 // Don't inline. Don't inline. Don't inline. Don't inline.
260 CheckArguments([10], arguments);
261 return f(1);
262 }
263 function test() {
264 assertEquals(42, g(10));
265 }
266 ;
267 ;
268
269 test();
270 %OptimizeFunctionOnNextCall(test);
271 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
272 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
273 %OptimizeFunctionOnNextCall(g);
274 test();
275 })();
276
277 (function() {
278 function f(a) {
279 // Don't inline. Don't inline. Don't inline. Don't inline.
280 // Don't inline. Don't inline. Don't inline. Don't inline.
281 // Don't inline. Don't inline. Don't inline. Don't inline.
282 // Don't inline. Don't inline. Don't inline. Don't inline.
283 // Don't inline. Don't inline. Don't inline. Don't inline.
284 // Don't inline. Don't inline. Don't inline. Don't inline.
285 // Don't inline. Don't inline. Don't inline. Don't inline.
286 // Don't inline. Don't inline. Don't inline. Don't inline.
287 // Don't inline. Don't inline. Don't inline. Don't inline.
288 // Don't inline. Don't inline. Don't inline. Don't inline.
289 // Don't inline. Don't inline. Don't inline. Don't inline.
290 // Don't inline. Don't inline. Don't inline. Don't inline.
291 // Don't inline. Don't inline. Don't inline. Don't inline.
292 // Don't inline. Don't inline. Don't inline. Don't inline.
293 // Don't inline. Don't inline. Don't inline. Don't inline.
294 // Don't inline. Don't inline. Don't inline. Don't inline.
295 assertEquals(undefined, this);
296 CheckArguments([1, 2], arguments);
297 CheckStackTrace([f, test]);
298 %DeoptimizeNow();
299 CheckArguments([1, 2], arguments);
300 CheckStackTrace([f, test]);
301 return 42;
302 }
303 function g(a) {
304 // Let it be inlined.
305 CheckArguments([10], arguments);
306 return f(1, 2);
307 }
308 function test() {
309 assertEquals(42, g(10));
310 }
311 ;
312 %SetForceInlineFlag(g);
313
314 test();
315 %OptimizeFunctionOnNextCall(test);
316 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
317 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
318 %OptimizeFunctionOnNextCall(g);
319 test();
320 })();
321
322 (function() {
323 function f(a) {
324 // Don't inline. Don't inline. Don't inline. Don't inline.
325 // Don't inline. Don't inline. Don't inline. Don't inline.
326 // Don't inline. Don't inline. Don't inline. Don't inline.
327 // Don't inline. Don't inline. Don't inline. Don't inline.
328 // Don't inline. Don't inline. Don't inline. Don't inline.
329 // Don't inline. Don't inline. Don't inline. Don't inline.
330 // Don't inline. Don't inline. Don't inline. Don't inline.
331 // Don't inline. Don't inline. Don't inline. Don't inline.
332 // Don't inline. Don't inline. Don't inline. Don't inline.
333 // Don't inline. Don't inline. Don't inline. Don't inline.
334 // Don't inline. Don't inline. Don't inline. Don't inline.
335 // Don't inline. Don't inline. Don't inline. Don't inline.
336 // Don't inline. Don't inline. Don't inline. Don't inline.
337 // Don't inline. Don't inline. Don't inline. Don't inline.
338 // Don't inline. Don't inline. Don't inline. Don't inline.
339 // Don't inline. Don't inline. Don't inline. Don't inline.
340 assertEquals(undefined, this);
341 CheckArguments([1, 2], arguments);
342 CheckStackTrace([f, test]);
343 %DeoptimizeNow();
344 CheckArguments([1, 2], arguments);
345 CheckStackTrace([f, test]);
346 return 42;
347 }
348 function g(a) {
349 // Don't inline. Don't inline. Don't inline. Don't inline.
350 // Don't inline. Don't inline. Don't inline. Don't inline.
351 // Don't inline. Don't inline. Don't inline. Don't inline.
352 // Don't inline. Don't inline. Don't inline. Don't inline.
353 // Don't inline. Don't inline. Don't inline. Don't inline.
354 // Don't inline. Don't inline. Don't inline. Don't inline.
355 // Don't inline. Don't inline. Don't inline. Don't inline.
356 // Don't inline. Don't inline. Don't inline. Don't inline.
357 // Don't inline. Don't inline. Don't inline. Don't inline.
358 // Don't inline. Don't inline. Don't inline. Don't inline.
359 // Don't inline. Don't inline. Don't inline. Don't inline.
360 // Don't inline. Don't inline. Don't inline. Don't inline.
361 // Don't inline. Don't inline. Don't inline. Don't inline.
362 // Don't inline. Don't inline. Don't inline. Don't inline.
363 // Don't inline. Don't inline. Don't inline. Don't inline.
364 // Don't inline. Don't inline. Don't inline. Don't inline.
365 CheckArguments([10], arguments);
366 return f(1, 2);
367 }
368 function test() {
369 assertEquals(42, g(10));
370 }
371 ;
372 ;
373
374 test();
375 %OptimizeFunctionOnNextCall(test);
376 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
377 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
378 %OptimizeFunctionOnNextCall(g);
379 test();
380 })();
381
382 (function() {
383 function ff(a) {
384 // Don't inline. Don't inline. Don't inline. Don't inline.
385 // Don't inline. Don't inline. Don't inline. Don't inline.
386 // Don't inline. Don't inline. Don't inline. Don't inline.
387 // Don't inline. Don't inline. Don't inline. Don't inline.
388 // Don't inline. Don't inline. Don't inline. Don't inline.
389 // Don't inline. Don't inline. Don't inline. Don't inline.
390 // Don't inline. Don't inline. Don't inline. Don't inline.
391 // Don't inline. Don't inline. Don't inline. Don't inline.
392 // Don't inline. Don't inline. Don't inline. Don't inline.
393 // Don't inline. Don't inline. Don't inline. Don't inline.
394 // Don't inline. Don't inline. Don't inline. Don't inline.
395 // Don't inline. Don't inline. Don't inline. Don't inline.
396 // Don't inline. Don't inline. Don't inline. Don't inline.
397 // Don't inline. Don't inline. Don't inline. Don't inline.
398 // Don't inline. Don't inline. Don't inline. Don't inline.
399 // Don't inline. Don't inline. Don't inline. Don't inline.
400 assertEquals(153, this.a);
401 CheckArguments([], arguments);
402 CheckStackTrace([ff, test]);
403 %DeoptimizeNow();
404 CheckArguments([], arguments);
405 CheckStackTrace([ff, test]);
406 return 42;
407 }
408 var f = ff.bind({a: 153});
409 function g(a) {
410 // Let it be inlined.
411 CheckArguments([10], arguments);
412 return f();
413 }
414 function test() {
415 assertEquals(42, g(10));
416 }
417 ;
418 %SetForceInlineFlag(g);
419
420 test();
421 %OptimizeFunctionOnNextCall(test);
422 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
423 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
424 %OptimizeFunctionOnNextCall(g);
425 test();
426 })();
427
428 (function() {
429 function ff(a) {
430 // Don't inline. Don't inline. Don't inline. Don't inline.
431 // Don't inline. Don't inline. Don't inline. Don't inline.
432 // Don't inline. Don't inline. Don't inline. Don't inline.
433 // Don't inline. Don't inline. Don't inline. Don't inline.
434 // Don't inline. Don't inline. Don't inline. Don't inline.
435 // Don't inline. Don't inline. Don't inline. Don't inline.
436 // Don't inline. Don't inline. Don't inline. Don't inline.
437 // Don't inline. Don't inline. Don't inline. Don't inline.
438 // Don't inline. Don't inline. Don't inline. Don't inline.
439 // Don't inline. Don't inline. Don't inline. Don't inline.
440 // Don't inline. Don't inline. Don't inline. Don't inline.
441 // Don't inline. Don't inline. Don't inline. Don't inline.
442 // Don't inline. Don't inline. Don't inline. Don't inline.
443 // Don't inline. Don't inline. Don't inline. Don't inline.
444 // Don't inline. Don't inline. Don't inline. Don't inline.
445 // Don't inline. Don't inline. Don't inline. Don't inline.
446 assertEquals(153, this.a);
447 CheckArguments([], arguments);
448 CheckStackTrace([ff, test]);
449 %DeoptimizeNow();
450 CheckArguments([], arguments);
451 CheckStackTrace([ff, test]);
452 return 42;
453 }
454 var f = ff.bind({a: 153});
455 function g(a) {
456 // Don't inline. Don't inline. Don't inline. Don't inline.
457 // Don't inline. Don't inline. Don't inline. Don't inline.
458 // Don't inline. Don't inline. Don't inline. Don't inline.
459 // Don't inline. Don't inline. Don't inline. Don't inline.
460 // Don't inline. Don't inline. Don't inline. Don't inline.
461 // Don't inline. Don't inline. Don't inline. Don't inline.
462 // Don't inline. Don't inline. Don't inline. Don't inline.
463 // Don't inline. Don't inline. Don't inline. Don't inline.
464 // Don't inline. Don't inline. Don't inline. Don't inline.
465 // Don't inline. Don't inline. Don't inline. Don't inline.
466 // Don't inline. Don't inline. Don't inline. Don't inline.
467 // Don't inline. Don't inline. Don't inline. Don't inline.
468 // Don't inline. Don't inline. Don't inline. Don't inline.
469 // Don't inline. Don't inline. Don't inline. Don't inline.
470 // Don't inline. Don't inline. Don't inline. Don't inline.
471 // Don't inline. Don't inline. Don't inline. Don't inline.
472 CheckArguments([10], arguments);
473 return f();
474 }
475 function test() {
476 assertEquals(42, g(10));
477 }
478 ;
479 ;
480
481 test();
482 %OptimizeFunctionOnNextCall(test);
483 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
484 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
485 %OptimizeFunctionOnNextCall(g);
486 test();
487 })();
488
489 (function() {
490 function ff(a) {
491 // Don't inline. Don't inline. Don't inline. Don't inline.
492 // Don't inline. Don't inline. Don't inline. Don't inline.
493 // Don't inline. Don't inline. Don't inline. Don't inline.
494 // Don't inline. Don't inline. Don't inline. Don't inline.
495 // Don't inline. Don't inline. Don't inline. Don't inline.
496 // Don't inline. Don't inline. Don't inline. Don't inline.
497 // Don't inline. Don't inline. Don't inline. Don't inline.
498 // Don't inline. Don't inline. Don't inline. Don't inline.
499 // Don't inline. Don't inline. Don't inline. Don't inline.
500 // Don't inline. Don't inline. Don't inline. Don't inline.
501 // Don't inline. Don't inline. Don't inline. Don't inline.
502 // Don't inline. Don't inline. Don't inline. Don't inline.
503 // Don't inline. Don't inline. Don't inline. Don't inline.
504 // Don't inline. Don't inline. Don't inline. Don't inline.
505 // Don't inline. Don't inline. Don't inline. Don't inline.
506 // Don't inline. Don't inline. Don't inline. Don't inline.
507 assertEquals(153, this.a);
508 CheckArguments([1], arguments);
509 CheckStackTrace([ff, test]);
510 %DeoptimizeNow();
511 CheckArguments([1], arguments);
512 CheckStackTrace([ff, test]);
513 return 42;
514 }
515 var f = ff.bind({a: 153});
516 function g(a) {
517 // Let it be inlined.
518 CheckArguments([10], arguments);
519 return f(1);
520 }
521 function test() {
522 assertEquals(42, g(10));
523 }
524 ;
525 %SetForceInlineFlag(g);
526
527 test();
528 %OptimizeFunctionOnNextCall(test);
529 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
530 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
531 %OptimizeFunctionOnNextCall(g);
532 test();
533 })();
534
535 (function() {
536 function ff(a) {
537 // Don't inline. Don't inline. Don't inline. Don't inline.
538 // Don't inline. Don't inline. Don't inline. Don't inline.
539 // Don't inline. Don't inline. Don't inline. Don't inline.
540 // Don't inline. Don't inline. Don't inline. Don't inline.
541 // Don't inline. Don't inline. Don't inline. Don't inline.
542 // Don't inline. Don't inline. Don't inline. Don't inline.
543 // Don't inline. Don't inline. Don't inline. Don't inline.
544 // Don't inline. Don't inline. Don't inline. Don't inline.
545 // Don't inline. Don't inline. Don't inline. Don't inline.
546 // Don't inline. Don't inline. Don't inline. Don't inline.
547 // Don't inline. Don't inline. Don't inline. Don't inline.
548 // Don't inline. Don't inline. Don't inline. Don't inline.
549 // Don't inline. Don't inline. Don't inline. Don't inline.
550 // Don't inline. Don't inline. Don't inline. Don't inline.
551 // Don't inline. Don't inline. Don't inline. Don't inline.
552 // Don't inline. Don't inline. Don't inline. Don't inline.
553 assertEquals(153, this.a);
554 CheckArguments([1], arguments);
555 CheckStackTrace([ff, test]);
556 %DeoptimizeNow();
557 CheckArguments([1], arguments);
558 CheckStackTrace([ff, test]);
559 return 42;
560 }
561 var f = ff.bind({a: 153});
562 function g(a) {
563 // Don't inline. Don't inline. Don't inline. Don't inline.
564 // Don't inline. Don't inline. Don't inline. Don't inline.
565 // Don't inline. Don't inline. Don't inline. Don't inline.
566 // Don't inline. Don't inline. Don't inline. Don't inline.
567 // Don't inline. Don't inline. Don't inline. Don't inline.
568 // Don't inline. Don't inline. Don't inline. Don't inline.
569 // Don't inline. Don't inline. Don't inline. Don't inline.
570 // Don't inline. Don't inline. Don't inline. Don't inline.
571 // Don't inline. Don't inline. Don't inline. Don't inline.
572 // Don't inline. Don't inline. Don't inline. Don't inline.
573 // Don't inline. Don't inline. Don't inline. Don't inline.
574 // Don't inline. Don't inline. Don't inline. Don't inline.
575 // Don't inline. Don't inline. Don't inline. Don't inline.
576 // Don't inline. Don't inline. Don't inline. Don't inline.
577 // Don't inline. Don't inline. Don't inline. Don't inline.
578 // Don't inline. Don't inline. Don't inline. Don't inline.
579 CheckArguments([10], arguments);
580 return f(1);
581 }
582 function test() {
583 assertEquals(42, g(10));
584 }
585 ;
586 ;
587
588 test();
589 %OptimizeFunctionOnNextCall(test);
590 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
591 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
592 %OptimizeFunctionOnNextCall(g);
593 test();
594 })();
595
596 (function() {
597 function ff(a) {
598 // Don't inline. Don't inline. Don't inline. Don't inline.
599 // Don't inline. Don't inline. Don't inline. Don't inline.
600 // Don't inline. Don't inline. Don't inline. Don't inline.
601 // Don't inline. Don't inline. Don't inline. Don't inline.
602 // Don't inline. Don't inline. Don't inline. Don't inline.
603 // Don't inline. Don't inline. Don't inline. Don't inline.
604 // Don't inline. Don't inline. Don't inline. Don't inline.
605 // Don't inline. Don't inline. Don't inline. Don't inline.
606 // Don't inline. Don't inline. Don't inline. Don't inline.
607 // Don't inline. Don't inline. Don't inline. Don't inline.
608 // Don't inline. Don't inline. Don't inline. Don't inline.
609 // Don't inline. Don't inline. Don't inline. Don't inline.
610 // Don't inline. Don't inline. Don't inline. Don't inline.
611 // Don't inline. Don't inline. Don't inline. Don't inline.
612 // Don't inline. Don't inline. Don't inline. Don't inline.
613 // Don't inline. Don't inline. Don't inline. Don't inline.
614 assertEquals(153, this.a);
615 CheckArguments([1, 2], arguments);
616 CheckStackTrace([ff, test]);
617 %DeoptimizeNow();
618 CheckArguments([1, 2], arguments);
619 CheckStackTrace([ff, test]);
620 return 42;
621 }
622 var f = ff.bind({a: 153});
623 function g(a) {
624 // Let it be inlined.
625 CheckArguments([10], arguments);
626 return f(1, 2);
627 }
628 function test() {
629 assertEquals(42, g(10));
630 }
631 ;
632 %SetForceInlineFlag(g);
633
634 test();
635 %OptimizeFunctionOnNextCall(test);
636 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
637 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
638 %OptimizeFunctionOnNextCall(g);
639 test();
640 })();
641
642 (function() {
643 function ff(a) {
644 // Don't inline. Don't inline. Don't inline. Don't inline.
645 // Don't inline. Don't inline. Don't inline. Don't inline.
646 // Don't inline. Don't inline. Don't inline. Don't inline.
647 // Don't inline. Don't inline. Don't inline. Don't inline.
648 // Don't inline. Don't inline. Don't inline. Don't inline.
649 // Don't inline. Don't inline. Don't inline. Don't inline.
650 // Don't inline. Don't inline. Don't inline. Don't inline.
651 // Don't inline. Don't inline. Don't inline. Don't inline.
652 // Don't inline. Don't inline. Don't inline. Don't inline.
653 // Don't inline. Don't inline. Don't inline. Don't inline.
654 // Don't inline. Don't inline. Don't inline. Don't inline.
655 // Don't inline. Don't inline. Don't inline. Don't inline.
656 // Don't inline. Don't inline. Don't inline. Don't inline.
657 // Don't inline. Don't inline. Don't inline. Don't inline.
658 // Don't inline. Don't inline. Don't inline. Don't inline.
659 // Don't inline. Don't inline. Don't inline. Don't inline.
660 assertEquals(153, this.a);
661 CheckArguments([1, 2], arguments);
662 CheckStackTrace([ff, test]);
663 %DeoptimizeNow();
664 CheckArguments([1, 2], arguments);
665 CheckStackTrace([ff, test]);
666 return 42;
667 }
668 var f = ff.bind({a: 153});
669 function g(a) {
670 // Don't inline. Don't inline. Don't inline. Don't inline.
671 // Don't inline. Don't inline. Don't inline. Don't inline.
672 // Don't inline. Don't inline. Don't inline. Don't inline.
673 // Don't inline. Don't inline. Don't inline. Don't inline.
674 // Don't inline. Don't inline. Don't inline. Don't inline.
675 // Don't inline. Don't inline. Don't inline. Don't inline.
676 // Don't inline. Don't inline. Don't inline. Don't inline.
677 // Don't inline. Don't inline. Don't inline. Don't inline.
678 // Don't inline. Don't inline. Don't inline. Don't inline.
679 // Don't inline. Don't inline. Don't inline. Don't inline.
680 // Don't inline. Don't inline. Don't inline. Don't inline.
681 // Don't inline. Don't inline. Don't inline. Don't inline.
682 // Don't inline. Don't inline. Don't inline. Don't inline.
683 // Don't inline. Don't inline. Don't inline. Don't inline.
684 // Don't inline. Don't inline. Don't inline. Don't inline.
685 // Don't inline. Don't inline. Don't inline. Don't inline.
686 CheckArguments([10], arguments);
687 return f(1, 2);
688 }
689 function test() {
690 assertEquals(42, g(10));
691 }
692 ;
693 ;
694
695 test();
696 %OptimizeFunctionOnNextCall(test);
697 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
698 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
699 %OptimizeFunctionOnNextCall(g);
700 test();
701 })();
702
703 (function() {
704 function ff(a) {
705 // Don't inline. Don't inline. Don't inline. Don't inline.
706 // Don't inline. Don't inline. Don't inline. Don't inline.
707 // Don't inline. Don't inline. Don't inline. Don't inline.
708 // Don't inline. Don't inline. Don't inline. Don't inline.
709 // Don't inline. Don't inline. Don't inline. Don't inline.
710 // Don't inline. Don't inline. Don't inline. Don't inline.
711 // Don't inline. Don't inline. Don't inline. Don't inline.
712 // Don't inline. Don't inline. Don't inline. Don't inline.
713 // Don't inline. Don't inline. Don't inline. Don't inline.
714 // Don't inline. Don't inline. Don't inline. Don't inline.
715 // Don't inline. Don't inline. Don't inline. Don't inline.
716 // Don't inline. Don't inline. Don't inline. Don't inline.
717 // Don't inline. Don't inline. Don't inline. Don't inline.
718 // Don't inline. Don't inline. Don't inline. Don't inline.
719 // Don't inline. Don't inline. Don't inline. Don't inline.
720 // Don't inline. Don't inline. Don't inline. Don't inline.
721 assertEquals(undefined, this);
722 CheckArguments([], arguments);
723 CheckStackTrace([f, test]);
724 %DeoptimizeNow();
725 CheckArguments([], arguments);
726 CheckStackTrace([f, test]);
727 return 42;
728 }
729 var f = new Proxy(ff, {});
730 function g(a) {
731 // Let it be inlined.
732 CheckArguments([10], arguments);
733 return f();
734 }
735 function test() {
736 assertEquals(42, g(10));
737 }
738 ;
739 %SetForceInlineFlag(g);
740
741 test();
742 %OptimizeFunctionOnNextCall(test);
743 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
744 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
745 %OptimizeFunctionOnNextCall(g);
746 test();
747 })();
748
749 (function() {
750 function ff(a) {
751 // Don't inline. Don't inline. Don't inline. Don't inline.
752 // Don't inline. Don't inline. Don't inline. Don't inline.
753 // Don't inline. Don't inline. Don't inline. Don't inline.
754 // Don't inline. Don't inline. Don't inline. Don't inline.
755 // Don't inline. Don't inline. Don't inline. Don't inline.
756 // Don't inline. Don't inline. Don't inline. Don't inline.
757 // Don't inline. Don't inline. Don't inline. Don't inline.
758 // Don't inline. Don't inline. Don't inline. Don't inline.
759 // Don't inline. Don't inline. Don't inline. Don't inline.
760 // Don't inline. Don't inline. Don't inline. Don't inline.
761 // Don't inline. Don't inline. Don't inline. Don't inline.
762 // Don't inline. Don't inline. Don't inline. Don't inline.
763 // Don't inline. Don't inline. Don't inline. Don't inline.
764 // Don't inline. Don't inline. Don't inline. Don't inline.
765 // Don't inline. Don't inline. Don't inline. Don't inline.
766 // Don't inline. Don't inline. Don't inline. Don't inline.
767 assertEquals(undefined, this);
768 CheckArguments([], arguments);
769 CheckStackTrace([f, test]);
770 %DeoptimizeNow();
771 CheckArguments([], arguments);
772 CheckStackTrace([f, test]);
773 return 42;
774 }
775 var f = new Proxy(ff, {});
776 function g(a) {
777 // Don't inline. Don't inline. Don't inline. Don't inline.
778 // Don't inline. Don't inline. Don't inline. Don't inline.
779 // Don't inline. Don't inline. Don't inline. Don't inline.
780 // Don't inline. Don't inline. Don't inline. Don't inline.
781 // Don't inline. Don't inline. Don't inline. Don't inline.
782 // Don't inline. Don't inline. Don't inline. Don't inline.
783 // Don't inline. Don't inline. Don't inline. Don't inline.
784 // Don't inline. Don't inline. Don't inline. Don't inline.
785 // Don't inline. Don't inline. Don't inline. Don't inline.
786 // Don't inline. Don't inline. Don't inline. Don't inline.
787 // Don't inline. Don't inline. Don't inline. Don't inline.
788 // Don't inline. Don't inline. Don't inline. Don't inline.
789 // Don't inline. Don't inline. Don't inline. Don't inline.
790 // Don't inline. Don't inline. Don't inline. Don't inline.
791 // Don't inline. Don't inline. Don't inline. Don't inline.
792 // Don't inline. Don't inline. Don't inline. Don't inline.
793 CheckArguments([10], arguments);
794 return f();
795 }
796 function test() {
797 assertEquals(42, g(10));
798 }
799 ;
800 ;
801
802 test();
803 %OptimizeFunctionOnNextCall(test);
804 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
805 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
806 %OptimizeFunctionOnNextCall(g);
807 test();
808 })();
809
810 (function() {
811 function ff(a) {
812 // Don't inline. Don't inline. Don't inline. Don't inline.
813 // Don't inline. Don't inline. Don't inline. Don't inline.
814 // Don't inline. Don't inline. Don't inline. Don't inline.
815 // Don't inline. Don't inline. Don't inline. Don't inline.
816 // Don't inline. Don't inline. Don't inline. Don't inline.
817 // Don't inline. Don't inline. Don't inline. Don't inline.
818 // Don't inline. Don't inline. Don't inline. Don't inline.
819 // Don't inline. Don't inline. Don't inline. Don't inline.
820 // Don't inline. Don't inline. Don't inline. Don't inline.
821 // Don't inline. Don't inline. Don't inline. Don't inline.
822 // Don't inline. Don't inline. Don't inline. Don't inline.
823 // Don't inline. Don't inline. Don't inline. Don't inline.
824 // Don't inline. Don't inline. Don't inline. Don't inline.
825 // Don't inline. Don't inline. Don't inline. Don't inline.
826 // Don't inline. Don't inline. Don't inline. Don't inline.
827 // Don't inline. Don't inline. Don't inline. Don't inline.
828 assertEquals(undefined, this);
829 CheckArguments([1], arguments);
830 CheckStackTrace([f, test]);
831 %DeoptimizeNow();
832 CheckArguments([1], arguments);
833 CheckStackTrace([f, test]);
834 return 42;
835 }
836 var f = new Proxy(ff, {});
837 function g(a) {
838 // Let it be inlined.
839 CheckArguments([10], arguments);
840 return f(1);
841 }
842 function test() {
843 assertEquals(42, g(10));
844 }
845 ;
846 %SetForceInlineFlag(g);
847
848 test();
849 %OptimizeFunctionOnNextCall(test);
850 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
851 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
852 %OptimizeFunctionOnNextCall(g);
853 test();
854 })();
855
856 (function() {
857 function ff(a) {
858 // Don't inline. Don't inline. Don't inline. Don't inline.
859 // Don't inline. Don't inline. Don't inline. Don't inline.
860 // Don't inline. Don't inline. Don't inline. Don't inline.
861 // Don't inline. Don't inline. Don't inline. Don't inline.
862 // Don't inline. Don't inline. Don't inline. Don't inline.
863 // Don't inline. Don't inline. Don't inline. Don't inline.
864 // Don't inline. Don't inline. Don't inline. Don't inline.
865 // Don't inline. Don't inline. Don't inline. Don't inline.
866 // Don't inline. Don't inline. Don't inline. Don't inline.
867 // Don't inline. Don't inline. Don't inline. Don't inline.
868 // Don't inline. Don't inline. Don't inline. Don't inline.
869 // Don't inline. Don't inline. Don't inline. Don't inline.
870 // Don't inline. Don't inline. Don't inline. Don't inline.
871 // Don't inline. Don't inline. Don't inline. Don't inline.
872 // Don't inline. Don't inline. Don't inline. Don't inline.
873 // Don't inline. Don't inline. Don't inline. Don't inline.
874 assertEquals(undefined, this);
875 CheckArguments([1], arguments);
876 CheckStackTrace([f, test]);
877 %DeoptimizeNow();
878 CheckArguments([1], arguments);
879 CheckStackTrace([f, test]);
880 return 42;
881 }
882 var f = new Proxy(ff, {});
883 function g(a) {
884 // Don't inline. Don't inline. Don't inline. Don't inline.
885 // Don't inline. Don't inline. Don't inline. Don't inline.
886 // Don't inline. Don't inline. Don't inline. Don't inline.
887 // Don't inline. Don't inline. Don't inline. Don't inline.
888 // Don't inline. Don't inline. Don't inline. Don't inline.
889 // Don't inline. Don't inline. Don't inline. Don't inline.
890 // Don't inline. Don't inline. Don't inline. Don't inline.
891 // Don't inline. Don't inline. Don't inline. Don't inline.
892 // Don't inline. Don't inline. Don't inline. Don't inline.
893 // Don't inline. Don't inline. Don't inline. Don't inline.
894 // Don't inline. Don't inline. Don't inline. Don't inline.
895 // Don't inline. Don't inline. Don't inline. Don't inline.
896 // Don't inline. Don't inline. Don't inline. Don't inline.
897 // Don't inline. Don't inline. Don't inline. Don't inline.
898 // Don't inline. Don't inline. Don't inline. Don't inline.
899 // Don't inline. Don't inline. Don't inline. Don't inline.
900 CheckArguments([10], arguments);
901 return f(1);
902 }
903 function test() {
904 assertEquals(42, g(10));
905 }
906 ;
907 ;
908
909 test();
910 %OptimizeFunctionOnNextCall(test);
911 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
912 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
913 %OptimizeFunctionOnNextCall(g);
914 test();
915 })();
916
917 (function() {
918 function ff(a) {
919 // Don't inline. Don't inline. Don't inline. Don't inline.
920 // Don't inline. Don't inline. Don't inline. Don't inline.
921 // Don't inline. Don't inline. Don't inline. Don't inline.
922 // Don't inline. Don't inline. Don't inline. Don't inline.
923 // Don't inline. Don't inline. Don't inline. Don't inline.
924 // Don't inline. Don't inline. Don't inline. Don't inline.
925 // Don't inline. Don't inline. Don't inline. Don't inline.
926 // Don't inline. Don't inline. Don't inline. Don't inline.
927 // Don't inline. Don't inline. Don't inline. Don't inline.
928 // Don't inline. Don't inline. Don't inline. Don't inline.
929 // Don't inline. Don't inline. Don't inline. Don't inline.
930 // Don't inline. Don't inline. Don't inline. Don't inline.
931 // Don't inline. Don't inline. Don't inline. Don't inline.
932 // Don't inline. Don't inline. Don't inline. Don't inline.
933 // Don't inline. Don't inline. Don't inline. Don't inline.
934 // Don't inline. Don't inline. Don't inline. Don't inline.
935 assertEquals(undefined, this);
936 CheckArguments([1, 2], arguments);
937 CheckStackTrace([f, test]);
938 %DeoptimizeNow();
939 CheckArguments([1, 2], arguments);
940 CheckStackTrace([f, test]);
941 return 42;
942 }
943 var f = new Proxy(ff, {});
944 function g(a) {
945 // Let it be inlined.
946 CheckArguments([10], arguments);
947 return f(1, 2);
948 }
949 function test() {
950 assertEquals(42, g(10));
951 }
952 ;
953 %SetForceInlineFlag(g);
954
955 test();
956 %OptimizeFunctionOnNextCall(test);
957 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
958 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
959 %OptimizeFunctionOnNextCall(g);
960 test();
961 })();
962
963 (function() {
964 function ff(a) {
965 // Don't inline. Don't inline. Don't inline. Don't inline.
966 // Don't inline. Don't inline. Don't inline. Don't inline.
967 // Don't inline. Don't inline. Don't inline. Don't inline.
968 // Don't inline. Don't inline. Don't inline. Don't inline.
969 // Don't inline. Don't inline. Don't inline. Don't inline.
970 // Don't inline. Don't inline. Don't inline. Don't inline.
971 // Don't inline. Don't inline. Don't inline. Don't inline.
972 // Don't inline. Don't inline. Don't inline. Don't inline.
973 // Don't inline. Don't inline. Don't inline. Don't inline.
974 // Don't inline. Don't inline. Don't inline. Don't inline.
975 // Don't inline. Don't inline. Don't inline. Don't inline.
976 // Don't inline. Don't inline. Don't inline. Don't inline.
977 // Don't inline. Don't inline. Don't inline. Don't inline.
978 // Don't inline. Don't inline. Don't inline. Don't inline.
979 // Don't inline. Don't inline. Don't inline. Don't inline.
980 // Don't inline. Don't inline. Don't inline. Don't inline.
981 assertEquals(undefined, this);
982 CheckArguments([1, 2], arguments);
983 CheckStackTrace([f, test]);
984 %DeoptimizeNow();
985 CheckArguments([1, 2], arguments);
986 CheckStackTrace([f, test]);
987 return 42;
988 }
989 var f = new Proxy(ff, {});
990 function g(a) {
991 // Don't inline. Don't inline. Don't inline. Don't inline.
992 // Don't inline. Don't inline. Don't inline. Don't inline.
993 // Don't inline. Don't inline. Don't inline. Don't inline.
994 // Don't inline. Don't inline. Don't inline. Don't inline.
995 // Don't inline. Don't inline. Don't inline. Don't inline.
996 // Don't inline. Don't inline. Don't inline. Don't inline.
997 // Don't inline. Don't inline. Don't inline. Don't inline.
998 // Don't inline. Don't inline. Don't inline. Don't inline.
999 // Don't inline. Don't inline. Don't inline. Don't inline.
1000 // Don't inline. Don't inline. Don't inline. Don't inline.
1001 // Don't inline. Don't inline. Don't inline. Don't inline.
1002 // Don't inline. Don't inline. Don't inline. Don't inline.
1003 // Don't inline. Don't inline. Don't inline. Don't inline.
1004 // Don't inline. Don't inline. Don't inline. Don't inline.
1005 // Don't inline. Don't inline. Don't inline. Don't inline.
1006 // Don't inline. Don't inline. Don't inline. Don't inline.
1007 CheckArguments([10], arguments);
1008 return f(1, 2);
1009 }
1010 function test() {
1011 assertEquals(42, g(10));
1012 }
1013 ;
1014 ;
1015
1016 test();
1017 %OptimizeFunctionOnNextCall(test);
1018 try { %OptimizeFunctionOnNextCall(f); } catch(e) {}
1019 try { %OptimizeFunctionOnNextCall(ff); } catch(e) {}
1020 %OptimizeFunctionOnNextCall(g);
1021 test();
1022 })();
1023
1024 // The end.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698