// 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. // Flags: --allow-natives-syntax --no-stress-opt --opt --no-always-opt // --nostress-opt is specified because the test corrupts the "pristine" // array prototype chain by storing an element, and this is tracked // per-isolate. A subsequent stress run would send the load generic, // and no more deoptimizations of foo would occur. function foo(a, i) { return a[i]; } %PrepareFunctionForOptimization(foo); var a = ['one', , 'three']; foo(a, 0); foo(a, 0); foo(a, 0); %OptimizeFunctionOnNextCall(foo); assertEquals(undefined, foo(a, 1)); assertOptimized(foo); // Whereas if we disrupt the prototype chain... Array.prototype[1] = 'cow'; assertEquals('cow', foo(a, 1)); assertUnoptimized(foo);