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