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");
|