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; }