js/src/jit-test/tests/jaeger/recompile/inlinestubs.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/jit-test/tests/jaeger/recompile/inlinestubs.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,43 @@
     1.4 +// rejoining after recompilation from CompileFunction or a native called by an inlined frame.
     1.5 +
     1.6 +var global = 0;
     1.7 +var arr = [
     1.8 +           function() { return 0; },
     1.9 +           function() { return 1; },
    1.10 +           function() { return 2; },
    1.11 +           function() { return 3; },
    1.12 +           function() { return 4; },
    1.13 +           function() { return 5; },
    1.14 +           function() { return 6; },
    1.15 +           function() { return 7; },
    1.16 +           function() { global = -"three"; return 8; }
    1.17 +           ];
    1.18 +function wrap_call(i) {
    1.19 +  var fn = arr["" + i];
    1.20 +  return fn();
    1.21 +}
    1.22 +function foo1() {
    1.23 +  var res = 0;
    1.24 +  for (var i = 0; i < arr.length; i++) {
    1.25 +    res += wrap_call(i);
    1.26 +    var expected = (i == arr.length - 1) ? NaN : 10;
    1.27 +    assertEq(global + 10, expected);
    1.28 +  }
    1.29 +}
    1.30 +foo1();
    1.31 +
    1.32 +var callfn = Function.call;
    1.33 +function wrap_floor(x, y) {
    1.34 +  var z = x;
    1.35 +  if (y)
    1.36 +    z = {}; // trick the compiler into not inlining the floor() call.
    1.37 +  return Math.floor(z);
    1.38 +}
    1.39 +
    1.40 +function foo2(x, y) {
    1.41 +  var z = 0;
    1.42 +  for (var i = 0; i < y; i++)
    1.43 +    z = wrap_floor(x + i, false);
    1.44 +  assertEq(z + 10, 2147483661);
    1.45 +}
    1.46 +foo2(0x7ffffff0 + .5, 20);

mercurial