| "use strict"; |
| |
| function assert(b) { |
| if (!b) |
| throw new Error("Bad") |
| } |
| |
| function testIntrinsic(radix) { |
| let s = ` |
| { |
| function foo(n) { |
| n = n|0; |
| return parseInt(n, ${radix}); |
| } |
| noInline(foo); |
| for (let i = 0; i < 10000; i++) |
| assert(foo(i) === i); |
| assert(foo("20") === 20); |
| } |
| `; |
| |
| eval(s); |
| } |
| |
| testIntrinsic(10); |
| testIntrinsic(0); |
| |
| function testIntrinsic2() { |
| function baz(n) { |
| n = n | 0; |
| return parseInt(n, 16); |
| } |
| noInline(baz); |
| |
| for (let i = 0; i < 100000; i++) |
| assert(baz(i) === parseInt("0x" + i)); |
| } |
| noDFG(testIntrinsic2); |
| testIntrinsic2(); |
| |
| function testIntrinsic3() { |
| function foo(s) { |
| return parseInt(s) + 1; |
| } |
| noInline(foo); |
| |
| for (let i = 0; i < 100000; i++) |
| assert(foo(i + "") === i + 1); |
| } |
| noDFG(testIntrinsic3); |
| testIntrinsic3(); |
| |
| function testIntrinsic4() { |
| function foo(s) { |
| return parseInt(s, 0) + 1; |
| } |
| noInline(foo); |
| |
| for (let i = 0; i < 100000; i++) |
| assert(foo(i + "") === i + 1); |
| } |
| testIntrinsic4(); |
| |
| function testIntrinsic5() { |
| function foo(s) { |
| return parseInt(s, 10) + 1; |
| } |
| noInline(foo); |
| |
| for (let i = 0; i < 100000; i++) |
| assert(foo(i + "") === i + 1); |
| } |
| testIntrinsic5(); |
| |
| function testIntrinsic6() { |
| function foo(s) { |
| return parseInt(s, 16) + 1; |
| } |
| noInline(foo); |
| |
| for (let i = 0; i < 100000; i++) |
| assert(foo(i + "") === (parseInt("0x" + i) + 1)); |
| } |
| noDFG(testIntrinsic6); |
| testIntrinsic6(); |
| |
| function testIntrinsic7() { |
| function foo(s) { |
| return parseInt(s, 16) + parseInt(s, 16); |
| } |
| noInline(foo); |
| |
| for (let i = 0; i < 100000; i++) |
| assert(foo(i + "") === (parseInt("0x" + i) * 2)); |
| } |
| noDFG(testIntrinsic7); |
| testIntrinsic7(); |