| let assert = { |
| sameValue: function(i, e, m) { |
| if (i !== e) |
| throw new Error(m); |
| } |
| } |
| |
| function untypedMod(x, y) { |
| return x % y; |
| } |
| noInline(untypedMod); |
| |
| let o = {valueOf: () => 10}; |
| |
| for (let i = 0; i < 100000; i++) { |
| let r = untypedMod(30, o); |
| assert.sameValue(r, 0, 30 + " % {valueOf: () => 10} = " + r); |
| } |
| |
| o2 = {valueOf: () => 10000}; |
| |
| for (let i = 0; i < 100000; i++) { |
| let r = untypedMod(o2, o); |
| assert.sameValue(r, 0, "{valueOf: () => 10000} % {valueOf: () => 10} = " + r); |
| } |
| |
| o = Object(10); |
| let r = untypedMod(30, o); |
| assert.sameValue(r, 0, 30 + " % Object(10) = " + r); |
| |
| o2 = Object(3240); |
| r = untypedMod(o2, o); |
| assert.sameValue(r, 0, "Object(3240) % Object(10) = " + r); |
| |
| for (let i = 0; i < 100000; i++) { |
| let r = untypedMod("9", "8"); |
| assert.sameValue(r, 1, "9 % 8 = " + r); |
| } |
| |