//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- var shouldBailout = false; var failed = 0; var valueCalls = 0; function FAILED(x) { WScript.Echo("FAILED #", x); failed++; } function test0() { var func2 = function () { return (g <= h); } var g = 1; var h = 1; obj.x = 1; if (shouldBailout) { h = { valueOf: function () { valueCalls++; return 3; } } } if ((func2(g))) { } else { FAILED(1); } return obj.x; }; function test1() { var func2 = function () { return (g <= h); } var g = 1; var h = 1; obj.x = 1; if (shouldBailout) { h = { valueOf: function () { valueCalls++; return 3; } } } if ((!func2(g))) { FAILED(2); } return obj.x; }; function test2() { var func2 = function () { return (g > h); } var g = 0; var h = 1; obj.x = 1; if (shouldBailout) { h = { valueOf: function () { valueCalls++; return 3; } } } if ((func2(g))) { FAILED(3); } return obj.x; }; function test3() { var func2 = function () { return (g == h); } var g = 0; var h = 1; obj.x = 1; if (shouldBailout) { h = { valueOf: function () { valueCalls++; return 3; } } } if ((func2(g))) { FAILED(4); } return obj.x; }; function test4() { var func2 = function () { return (g != h); } var g = 3; var h = 3; obj.x = 1; if (shouldBailout) { h = { valueOf: function () { valueCalls++; return 3; } } } if ((func2(g))) { FAILED(5); } return obj.x; }; var obj = new Object(); obj.x = 1; // generate profile test0(); test1(); test2(); test3(); test4(); // run JITted code test0(); test1(); test2(); test3(); test4(); // run code with bailouts enabled shouldBailout = true; test0(); test1(); test2(); test3(); test4(); if (valueCalls != 5) { FAILED(6); } if (failed == 0) { WScript.Echo("Passed"); }