Source code

Revision control

Copy as Markdown

Other Tools

// Optimized out scopes should be considered optimizedOut.
var g = newGlobal({newCompartment: true});
var dbg = new Debugger;
dbg.addDebuggee(g);
g.eval("" + function f() {
var x = 42;
{
let y = 43;
(function () { })();
}
});
dbg.onEnterFrame = function (f) {
if (f.callee && (f.callee.name === undefined)) {
blockenv = f.environment.parent;
assertEq(blockenv.optimizedOut, true);
assertEq(blockenv.inspectable, true);
assertEq(blockenv.type, "declarative");
assertEq(blockenv.calleeScript, null);
assertEq(blockenv.names().indexOf("y") !== -1, true);
funenv = blockenv.parent;
assertEq(funenv.optimizedOut, true);
assertEq(funenv.inspectable, true);
assertEq(funenv.type, "declarative");
assertEq(funenv.calleeScript, f.older.script);
assertEq(funenv.names().indexOf("x") !== -1, true);
globalenv = funenv.parent.parent;
assertEq(globalenv.optimizedOut, false);
assertEq(globalenv.inspectable, true);
assertEq(globalenv.type, "object");
assertEq(globalenv.calleeScript, null);
dbg.removeDebuggee(g);
assertEq(blockenv.inspectable, false);
assertEq(funenv.inspectable, false);
}
}
g.f();