| // 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 |
| |
| (function TestLargeObjectDictionaryLiteral() { |
| // Create potential large-space object literal. |
| let properties = []; |
| // Constant chosen so the dictionary properties store lies in large object |
| // space. |
| const max = 0x1ef3e / 3; |
| for (let i = 0; i < max; i++) { |
| properties.push("p"+i); |
| } |
| let source = "return { __proto__:null, " + properties.join(":'',") + ":''}" |
| let createObject = new Function(source); |
| let object = createObject(); |
| %HeapObjectVerify(object); |
| assertFalse(%HasFastProperties(object)); |
| assertEquals(Object.getPrototypeOf(object ), null); |
| let keys = Object.keys(object); |
| // modify original object |
| object['new_property'] = {}; |
| object[1] = 12; |
| %HeapObjectVerify(object); |
| |
| let object2 = createObject(); |
| %HeapObjectVerify(object2); |
| assertFalse(object2 === object); |
| assertFalse(%HasFastProperties(object2)); |
| assertEquals(Object.getPrototypeOf(object2), null); |
| assertEquals(keys, Object.keys(object2)); |
| })(); |