summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/optimized-out-arrow-this.js
blob: adc1702fa1bc9566c3a2cc55562db6913290d68a (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
var g = newGlobal({newCompartment: true});
var dbg = new Debugger(g);

g.eval(`
function f() {
  // |this| in arrow-functions refers to the |this| binding in outer functions.
  // So when |frame.eval("this")| is executed, the outer |this| binding should
  // be returned, unless it has been optimised out.
  (() => {})();

  // Ensure a |this| binding is created for |f|.
  return this;
}
`);

var errors = [];

function enterFrame(frame) {
  // Disable the handler so we don't call it recursively through |frame.eval|.
  dbg.onEnterFrame = undefined;

  // Store the error when resolving |this| was unsuccessful.
  var r = frame.eval("this");
  if (r.throw) {
    errors.push(r.throw);
  }

  // Re-enable the handler.
  dbg.onEnterFrame = enterFrame;
};

dbg.onEnterFrame = enterFrame;

g.f();

assertEq(errors.length, 1);
assertEq(errors[0].unsafeDereference().toString(),
         "Error: variable 'this' has been optimized out");