function assert(b) { if (!b) throw new Error; } noInline(assert); function foo(a, b) { let r1 = b[0]; let x = [...a]; let r2 = b[0]; assert(r1 + r2 === 43); } noInline(foo); let b = [42]; let a = []; a[Symbol.iterator] = function* () { b[0] = 1; }; for (let i = 0; i < 10000; ++i) { b[0] = 42; foo(a, b); }