| // 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 |
| |
| // Test Object literal with large-object elements. |
| let indices = []; |
| const max = 0x1ef3e + 100; |
| for (let i = 0; i < max; i++) { |
| indices.push(""+i); |
| } |
| let source = "return {" + indices.join(":0,") + ":0};" |
| let largeElementsLiteral = new Function(source); |
| |
| function TestLargeObjectElements() { |
| // Corresponds to FixedArray::kMaxRegularLength. |
| let object = largeElementsLiteral(); |
| %HeapObjectVerify(object); |
| for (let i = 0; i < max; i++) { |
| assertEquals(0, object[i]); |
| } |
| object[0] = 0xFF; |
| assertEquals(0xFF, object[0]); |
| object[1] = 1.23; |
| assertEquals(1.23, object[1]); |
| %HeapObjectVerify(object); |
| } |
| |
| %PrepareFunctionForOptimization(TestLargeObjectElements); |
| TestLargeObjectElements(); |
| TestLargeObjectElements(); |
| %OptimizeFunctionOnNextCall(TestLargeObjectElements); |
| TestLargeObjectElements(); |