summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-eval-19.js
blob: 3654fb9bb97ee5f523afe00504374d309f26db30 (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
// Eval-in-frame of optimized frames to break out of an infinite loop.

load(libdir + "jitopts.js");

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

withJitOptions(Opts_IonEagerNoOffthreadCompilation, function () {
  var g = newGlobal();
  var dbg = new Debugger;

  g.eval("" + function f(d) { g(d); });
  g.eval("" + function g(d) { h(d); });
  g.eval("" + function h(d) {
    var i = 0;
    while (d)
      interruptIf(d && i++ == 4000);
  });

  setInterruptCallback(function () {
    dbg.addDebuggee(g);
    var frame = dbg.getNewestFrame();
    if (frame.callee.name != "h" || frame.implementation != "ion")
      return true;
    frame.eval("d = false;");
    return true;
  });

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