// Copyright 2019 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 // This gets very slow with stress flags, and triggers optimization anyway: // Flags: --nostress-opt --noalways-opt (function testLargeClassesProperties(){ // This is to test for dictionary mode when there more than // kMaxNumberOfDescriptors (1024) properties. const kLimit = 1030; let evalString = "function f(i) { " + "let clazz = class { " + " constructor(i) { this.value = i;"; for (let i = 0; i < kLimit ; i++) { evalString += "this.property"+i +" = "+i+"; " } evalString += "}};" + " return (new clazz(i)); }; f;"; let fn = eval(evalString); %PrepareFunctionForOptimization(fn); assertEquals(fn(1).value, 1); assertEquals(fn(2).value, 2); assertEquals(fn(3).value, 3); %OptimizeFunctionOnNextCall(fn); assertEquals(fn(4).value, 4); let instance = fn(1); assertEquals(Object.getOwnPropertyNames(instance).length, kLimit+1); // Get and set all properties. for (let i = 0; i < kLimit; i++) { const key = "property" + i; assertEquals(instance[key], i); const value = "value"+i; instance[key] = value; assertEquals(instance[key], value); } })();