;(function () { function foo(a, b) { var result = null; try { result = a == b; } catch(e) { } } 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); } var o = { valueOf: function() { return {}; }, toString: function() { return {}; } }; foo(o, "hello"); })(); function assert(b) { if (!b) throw new Error("Bad assertion"); } noInline(assert); ;(function() { var _shouldDoSomethingInFinally = false; function shouldDoSomethingInFinally() { return _shouldDoSomethingInFinally; } noInline(shouldDoSomethingInFinally); function foo(a, b) { var result = null; try { result = a == b; } finally { if (shouldDoSomethingInFinally()) assert(result === null); } return result; } 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); } var o = { valueOf: function() { return {}; }, toString: function() { return {}; } }; try { _shouldDoSomethingInFinally = true; foo(o, "hello"); } catch(e) {} })();