function foo(o, a) { | |
let resetFlag = false; | |
if (flag) { | |
resetFlag = true; | |
flag = false; | |
} | |
let x = o(10); | |
let y = o(20); | |
if (resetFlag) | |
flag = true; | |
try { | |
o.apply(null, a); | |
} catch(e) { | |
if (x !== 10) | |
throw new Error("Not 10") | |
return x + y; | |
} | |
} | |
noInline(foo); | |
var flag = false; | |
function f(arg1, arg2, arg3) { | |
if (flag) | |
throw new Error("blah") | |
return arg1; | |
} | |
noInline(f); | |
for (let i = 0; i < 100000; i++) { | |
foo(f, [10, 20, 30]); | |
} | |
flag = true; | |
foo(f, [10, 20, 30]); |