| function foo(o) { |
| o.f = (o.f | 0) + 42; |
| } |
| |
| function callFoo(o) { |
| return foo(o); |
| } |
| |
| noInline(callFoo); |
| |
| for (var i = 0; i < 10000; ++i) { |
| var object; |
| if ((i % 3) == 0) |
| object = {g:3}; |
| else if ((i % 3) == 1) |
| object = {f:1, g:2}; |
| else if ((i % 3) == 2) |
| object = {g:1, f:2}; |
| callFoo(object); |
| if (object.f != 42 + (i % 3)) |
| throw "Error: bad result for i = " + i + ": " + object.f; |
| } |
| |
| function bar(o) { |
| var result = o.f; |
| foo(o); |
| return result; |
| } |
| |
| noInline(bar); |
| |
| for (var i = 0; i < 100000; ++i) { |
| var o = {f:42}; |
| var result = bar(o); |
| if (result != 42) |
| throw "Error: bad result at end: " + result; |
| if (o.f != 42 + 42) |
| throw "Error: bad o.f: " + o.f; |
| } |
| |