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