| // 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); | |
| })(); |