| function foo(a, b) { |
| return a + b; |
| } |
| |
| noInline(foo); |
| |
| var bStr = "b"; |
| for (var i = 0; i < 30; ++i) |
| bStr = bStr + bStr; |
| |
| var effects = 0; |
| var b = {toString: function() { effects++; return bStr; }}; |
| |
| for (var i = 0; i < 10000; ++i) { |
| effects = 0; |
| var result = foo("a", b); |
| if (result.length != "a".length + bStr.length) |
| throw "Error: bad result in loop: " + result; |
| if (effects != 1) |
| throw "Error: bad number of effects: " + effects; |
| } |
| |
| // Create a large string. |
| var a = "a"; |
| for (var i = 0; i < 30; ++i) |
| a = a + a; |
| |
| effects = 0; |
| var result = null; |
| var didThrow = false; |
| try { |
| result = foo(a, b); |
| } catch (e) { |
| didThrow = true; |
| } |
| |
| if (!didThrow) |
| throw "Error: did not throw."; |
| if (result !== null) |
| throw "Error: did set result to something: " + result; |
| if (effects != 1) |
| throw "Error: bad number of effects at end: " + effects; |