| //------------------------------------------------------------------------------------------------------- |
| // 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(); |