function arrayEq(a, b) { if (a.length !== b.length) return false; for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; } { let concat = Array.prototype.concat; noInline(concat); let array = [1, 2, 3]; let {proxy:p, revoke} = Proxy.revocable(array, { get : function(o, k) { return o[k]; } }); concat.call(p,p); for (let i = 0; i < 100000; i++) { if (!arrayEq(concat.call(p,p), [1,2,3,1,2,3])) throw "bad"; } revoke(); failed = true; try { concat.call(p,p); } catch (e) { failed = false; } if (failed) throw "bad" }