// Reviewed function shouldBe(actual, expected) { if (actual !== expected) throw new Error('bad value: ' + actual); } // Simple assignment (not FunctionCallBracketNode). shouldBe(function () { var object = { null: 'ok' }; return object[object = null]; }(), 'ok'); shouldBe(function (value) { var object = { }; object.null = 'ok'; return object[object = value]; }(null), 'ok'); shouldBe(function () { var object = { null: 'ok' }; return object['null']; }(), 'ok'); shouldBe(function (value) { var object = { }; object.null = 'ok'; return object['null']; }(null), 'ok'); shouldBe(function () { var object = { null: 'ok' }; function fill() { return object = null; } return object[fill()]; }(), 'ok'); shouldBe(function (value) { var object = { }; object.null = 'ok'; function fill() { return object = value; } return object[fill()]; }(null), 'ok'); // FunctionCallBracketNode. shouldBe(function () { var object = { null: function () { return 'ok'; } }; return object[object = null](); }(), 'ok'); shouldBe(function (value) { var object = { }; object.null = function () { return 'ok'; }; return object[object = value](); }(null), 'ok'); shouldBe(function () { var object = { null: function () { return 'ok'; } }; return object['null'](); }(), 'ok'); shouldBe(function (value) { var object = { }; object.null = function () { return 'ok'; }; return object['null'](); }(null), 'ok'); shouldBe(function () { var object = { null: function () { return 'ok'; } }; function fill() { return object = null; } return object[fill()](); }(), 'ok'); shouldBe(function (value) { var object = { }; object.null = function () { return 'ok'; }; function fill() { return object = value; } return object[fill()](); }(null), 'ok');