// Copyright 2015 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. (()=>{ var a = [0,1,2,,,,7]; var proto = {} a.__proto__ = proto; var visits = 0; Array.prototype.forEach.call(a, (v,i,o) => { ++visits; proto[4] = 4; }); assertEquals(5, visits); })(); // We have a fast path for arrays with the initial array prototype. // If elements are inserted into the initial array prototype as we traverse // a holey array, we should gracefully exit the fast path. (()=>{ let a = [1, 2, 3,,,, 7]; function poison(v, i) { if (i === 2) { [].__proto__[4] = 3; } return v*v; } a.forEach(poison); })(); // Same, but for a double array. (()=>{ let a = [1, 2.5, 3,,,, 7]; function poison(v, i) { if (i === 2) { [].__proto__[4] = 3; } return v*v; } a.forEach(poison); })();