//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // These tests are to make sure the following: // o[i] = ... // ... = o.x -- make sure that we don't hoist the load of o.x, // if previous call to o[i] has a chance to kill some o.x. // Access via o.x (use NaN) function test1() { var a = {}; var r; a.NaN = "orig"; for (var i = 0; i < 1; ++i) { r = a.NaN; i = Math.pow(1, Infinity); // Get NaN which val we know to be a Number. a[i] = "new"; // This will kill a.NaN. r = a.NaN; // This must cause a reload. } return r; } // Access via o.x (use Infinity) function test2() { var a = {}; var r; a.Infinity = "orig"; for (var i = 0; i < 1; ++i) { r = a.Infinity; i = 1 / 0; // Get Infinity which val we know to be a Number. a[i] = "new"; // This will kill a.Infinity. r = a.Infinity; // This must cause a reload. } return r; } // Access via o["x"] (use -Infinity) function test3() { var a = {}; a[-Infinity] = "orig"; var r; for (var i = 0; i > -1; --i) { r = a["-Infinity"]; i = -1 / 0; a[i] = "new"; r = a["-Infinity"]; } return r; } // Access fia o["x"], use float number function test4() { var a = {}; var r; a[1.23] = "orig"; for (var i = 1; i < 2; ++i) { r = a[1.23]; i = 1 + 0.23; a[i] = "new"; // This will kill a[1.23]. r = a["1.23"]; // This must cause a reload. } return r; } // Access via o[x] (use NaN) function test5() { var a = {}; var r; a.NaN = "orig"; for (var i = 0; i < 1; ++i) { r = a.NaN; i = Math.pow(1, Infinity); // Get a NaN that which val we know to be a Number. a[i] = "new"; // This will kill a.NaN. r = a[NaN]; // This must cause a reload. } return r; } // Access via o[x] (use float number) function test6() { var a = {}; var r; a[1.23] = "orig"; for (var i = 1; i < 2; ++i) { r = a[1.23]; i = 1 + 0.23; a[i] = "new"; // This will kill a[1.23]. r = a[1.23]; // This must cause a reload. } return r; } var isPass = true; function reportError(arg1, arg2) { WScript.Echo(arg1, arg2); isPass = false; } var expected = "new"; var r1 = test1(); var r2 = test2(); var r3 = test3(); var r4 = test4(); var r5 = test5(); var r6 = test6(); if (r1 != expected) reportError("bug: r1 =", r1); if (r2 != expected) reportError("bug: r2 =", r2); if (r3 != expected) reportError("bug: r3 =", r3); if (r4 != expected) reportError("bug: r4 =", r4); if (r5 != expected) reportError("bug: r5 =", r5); if (r6 != expected) reportError("bug: r6 =", r6); if (isPass) WScript.Echo("PASS");