// Copyright 2016 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 --expose-gc (function() { function foo() { var a = new Array(); a[0] = 10; return a; } assertEquals(1, foo().length); gc(); gc(); gc(); gc(); // Change prototype elements from fast smi to slow elements dictionary. // The validity cell is invalidated by the change of Array.prototype's // map. Array.prototype.__defineSetter__("0", function() {}); assertEquals(0, foo().length); })(); (function() { function foo() { var a = new Array(); a[0] = 10; return a; } // Change prototype elements from fast smi to dictionary. Array.prototype[123456789] = 42; Array.prototype.length = 0; assertEquals(1, foo().length); gc(); gc(); gc(); gc(); // Change prototype elements from dictionary to slow elements dictionary. // The validity cell is invalidated by making the elements dictionary slow. Array.prototype.__defineSetter__("0", function() {}); assertEquals(0, foo().length); })();