function foo(a, b) { return a + b; } function verify(a, b) { if (a !== b) throw "Error: the two arguments objects aren't identical."; if (a[0] !== 42) throw "Error: the first argument isn't 42 (a)."; if (b[0] !== 42) throw "Error: the first argument isn't 42 (b)."; } noInline(verify); var global = false; function bar(x) { var a = arguments; if (global) { x = 42; verify(arguments, a); } return foo.apply(null, a); } function baz(a, b) { return bar(a, b); } noInline(baz); for (var i = 0; i < 10000; ++i) { var result = baz(1, 2); if (result != 1 + 2) throw "Error: bad result: " + result; } global = true; var result = baz(1, 2); if (result != 42 + 2) throw "Error: bad result at end: " + result;