//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- function fieldhoist1() { var object = {}; var sum = 0; for (var i = 0; i < 3; i++) { sum += object.sum; // hoisted field load Object.defineProperty(object, "sum", { get: function() { WScript.Echo("sum" ); }, configurable: true }); sum += object.sum; // implicit call bailout } } function fieldhoist2() { var object = {}; var sum = 0; for (var i = 0; i < 3; i++) { sum += object.sum; // hoisted field load Object.defineProperty(object, "x", { get: function() { WScript.Echo("x"); }, configurable: true }); // kill all fields sum += object.sum; // reload, no bailout } } function fieldhoist3(name) { var object = { sum: 1}; Object.defineProperty(object, name, { set: function(val) { WScript.Echo(val); }, configurable: true }); var sum = 0; for (var i = 0; i < 3; i++) { sum += object.sum; // hoisted field load object[name] = object.sum; // kill all fields sum += object.sum; // reload, no bailout } } function main() { fieldhoist1(); fieldhoist2(); fieldhoist3("x"); } main();