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