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