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