| 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" |
| |
| } |