michael@0: function add(x, y) { michael@0: if (x & 0x1) michael@0: return x + y; michael@0: else michael@0: return y + x; michael@0: } michael@0: michael@0: function runBinop(binop, lhs, rhs) { michael@0: return binop(lhs, rhs); michael@0: } michael@0: michael@0: //dis(run_binop); michael@0: michael@0: // Get the add function to compile. michael@0: var accum = 0; michael@0: for (var i = 0; i < 1000; ++i) michael@0: accum += add(1, 1); michael@0: assertEq(accum, 2000); michael@0: michael@0: // Get the runBinop function to compile and inline the add function. michael@0: var accum = 0; michael@0: for (var i = 0; i < 11000; ++i) michael@0: accum = runBinop(add, i, i); michael@0: assertEq(accum, 21998); michael@0: michael@0: var t30 = 1 << 30; michael@0: var t31 = t30 + t30; michael@0: var result = runBinop(add, t31, t31); michael@0: assertEq(result, Math.pow(2, 32));