function assert(b) { if (!b) throw new Error("Bad assertion!"); } noInline(assert); let value = false; function baz(x) { if (typeof x !== "number") { value = true; } return x; } noInline(baz); function bar(...args) { return args; } let didEffects = false; function effects() { didEffects = true; } noInline(effects); function foo(a, ...args) { let theArgs = [...args, a, ...args]; baz(a); if (value) { effects(); } let r = bar.apply(null, theArgs); return r; } noInline(foo); for (let i = 0; i < 100000; i++) { foo(i, i+1); assert(!didEffects); } let o = {}; let [a, b, c] = foo(o, 20); assert(a === 20); assert(b === o); assert(c === 20); assert(didEffects);