function assert(b) { if (!b) throw new Error("Bad assertion"); } noInline(assert); var o = { valueOf: function() { return {}; }, toString: function() { return {}; } }; function read() { return "read"; } noInline(read); function foo(a, b) { var result = null; var value = read(); try { result = a == b; } catch(e) { assert("" + value === "read"); } return value; } noInline(foo); for (var i = 0; i < 1000; i++) { foo(10, 20); foo({}, {}); foo(10, 10.0); foo("hello", "hello"); foo(null, undefined); foo(false, 0); } foo(o, "hello");