// vim: set ts=8 sts=4 et sw=4 tw=99: function f(x, y) { // Confuse the type analysis to not know the type of x. var u; var a = x + u; var b = x + 3; return x + y; } function g_bool(x, y) { var t; if (x + 0) t = true; else t = false; return t + y; } function g_null(x) { return null + x; } assertEq(g_bool(1, 2), 3); assertEq(g_bool(0, 2), 2); assertEq(g_null(2), 2); // These will not bailout. assertEq(f(Math.cos(Math.PI), 2), 1); assertEq(f(null, 2), 2); assertEq(f(false, 2), 2); assertEq(f(true, 2), 3); assertEq(f(17, 2), 19); // These will bailout. assertEq(f(undefined, 2), Number.NaN); assertEq(f("20", 2), "202"); assertEq(f(16.3, 2), 18.3); assertEq((1 / f(-0, -0)), -Infinity);