// Copyright 2017 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 // Ensure that mutation of the Object.keys result doesn't affect the // enumeration cache for fast-mode objects. (function() { const a = {x:1, y:2}; let k = Object.keys(a); %HeapObjectVerify(k); assertEquals(2, k.length); assertEquals("x", k[0]); assertEquals("y", k[1]); k[0] = "y"; k[1] = "x"; k = Object.keys(a); assertEquals(2, k.length); assertEquals("x", k[0]); assertEquals("y", k[1]); })(); // Ensure that the copy-on-write keys are handled properly, even in // the presence of Symbols. (function() { const s = Symbol(); const a = {[s]: 1}; let k = Object.keys(a); %HeapObjectVerify(k); assertEquals(0, k.length); k.shift(); assertEquals(0, k.length); })();