// Frame.this can be marked as optimized-out in some cases. Here we call an
// arrow function but its enclosing function is no longer live, so it's
// impossible to recover its missing 'this' binding.
var g = newGlobal({newCompartment: true});
g.eval("x = 4");
g.eval("var foo = function() { return () => 1; }; var arrow = foo.call(3);");
var dbg = new Debugger(g);
var log = "";
dbg.onEnterFrame = function (frame) {
    if (frame.type === "eval")
	return;
    assertEq(frame.type, "call");
    assertEq(frame.this.optimizedOut, true);
    frame.eval("try { print(this.x); } catch(e) { exc = e; }");
    assertEq(typeof g.exc, "object");
    log += "d";
};
g.eval("arrow();");
assertEq(log, "d");
