function shouldBe(actual, expected) { if (actual !== expected) throw new Error(`bad value: ${String(actual)}`); } function test(x) { var y = x; var z = y * 2; if (z) { z += y; z += y; z += y; } return Number(z) < 42; } noInline(test); for (var i = 0; i < 1e4; ++i) shouldBe(test(1000000000), false); // Extend to Doubles. for (var i = 0; i < 1e4; ++i) shouldBe(test(42.195), false); // Leave ToNumber for objects. // And this should update the value profiling to accept doubles in ToNumber calls. var object = { valueOf() { return 42.195; } }; for (var i = 0; i < 1e4; ++i) shouldBe(test(object), false);