Source code

Revision control

Copy as Markdown

Other Tools

load(libdir + 'asserts.js');
load(libdir + 'iteration.js');
var outer = "unmodified";
function f(v)
{
if (v + "")
({ [(outer = "modified")]: v } = v);
}
assertEq(outer, "unmodified");
f(true);
assertEq(outer, "modified");
outer = "unmodified";
f({});
assertEq(outer, "modified");
outer = "unmodified";
assertThrowsInstanceOf(() => f(null), TypeError);
assertEq(outer, "unmodified");
assertThrowsInstanceOf(() => f(undefined), TypeError);
assertEq(outer, "unmodified");
function g(v)
{
if (v + "")
({ [{ toString() { outer = "modified"; return 0; } }]: v } = v);
}
outer = "unmodified";
g(true);
assertEq(outer, "modified");
outer = "unmodified";
g({});
assertEq(outer, "modified");
outer = "unmodified";
assertThrowsInstanceOf(() => g(undefined), TypeError);
assertEq(outer, "unmodified");
assertThrowsInstanceOf(() => g(null), TypeError);
assertEq(outer, "unmodified");