| //------------------------------------------------------------------------------------------------------- | |
| // 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"); | |
| } |