|
1 // rejoining after recompilation from CompileFunction or a native called by an inlined frame. |
|
2 |
|
3 var global = 0; |
|
4 var arr = [ |
|
5 function() { return 0; }, |
|
6 function() { return 1; }, |
|
7 function() { return 2; }, |
|
8 function() { return 3; }, |
|
9 function() { return 4; }, |
|
10 function() { return 5; }, |
|
11 function() { return 6; }, |
|
12 function() { return 7; }, |
|
13 function() { global = -"three"; return 8; } |
|
14 ]; |
|
15 function wrap_call(i) { |
|
16 var fn = arr["" + i]; |
|
17 return fn(); |
|
18 } |
|
19 function foo1() { |
|
20 var res = 0; |
|
21 for (var i = 0; i < arr.length; i++) { |
|
22 res += wrap_call(i); |
|
23 var expected = (i == arr.length - 1) ? NaN : 10; |
|
24 assertEq(global + 10, expected); |
|
25 } |
|
26 } |
|
27 foo1(); |
|
28 |
|
29 var callfn = Function.call; |
|
30 function wrap_floor(x, y) { |
|
31 var z = x; |
|
32 if (y) |
|
33 z = {}; // trick the compiler into not inlining the floor() call. |
|
34 return Math.floor(z); |
|
35 } |
|
36 |
|
37 function foo2(x, y) { |
|
38 var z = 0; |
|
39 for (var i = 0; i < y; i++) |
|
40 z = wrap_floor(x + i, false); |
|
41 assertEq(z + 10, 2147483661); |
|
42 } |
|
43 foo2(0x7ffffff0 + .5, 20); |