summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-eval-20.js
blob: dde786f8ef11f970fa8edf24b8ab0689a8bec4da (plain)
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
// |jit-test| --ion-osr=off

// Eval-in-frame with different type on non-youngest Ion frame.

load(libdir + "jitopts.js");

if (!jitTogglesMatch(Opts_Ion2NoOffthreadCompilation))
  quit(0);

withJitOptions(Opts_Ion2NoOffthreadCompilation, function () {
  function test(shadow) {
    var g = newGlobal({newCompartment: true});
    var dbg = new Debugger;

    // Note that we depend on CCW scripted functions being opaque to Ion
    // optimization for this test.
    g.h = function h(d) {
      if (d) {
        dbg.addDebuggee(g);
        var f = dbg.getNewestFrame().older;
        assertEq(f.implementation, "ion");
        assertEq(f.environment.getVariable("foo"), 42);

        // EIF of a different type too.
        f.eval((shadow ? "var " : "") + "foo = 'string of 42'");
        g.expected = shadow ? 42 : "string of 42";
      }
    }

    g.eval("" + function f(d) {
      var foo = 42;
      g(d);
      return foo;
    });
    g.eval("" + function g(d) {
      h(d);
    });

    g.eval("(" + function () {
      for (i = 0; i < 5; i++)
        f(false);
      assertEq(f(true), "string of 42");
    } + ")();");
  }

  test(false);
  test(true);
});