// 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(functiontestLargeClassesMethods(){// This is to test for dictionary mode when there more than// kMaxNumberOfDescriptors (1024) properties.constkLimit=1030;letevalString="(function(i) { "+"let clazz = class { "+" constructor(i) { this.value = i; } ";for(leti=0;i<kLimit;i++){evalString+="property"+i+"() { return "+i+"; }; "}evalString+="};"+" return new clazz(i); })";letfn=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);letinstance=fn(1);assertEquals(Object.getOwnPropertyNames(instance).length,1);assertEquals(Object.getOwnPropertyNames(instance.__proto__).length,kLimit+1);// Call all instance functions.for(leti=0;i<kLimit;i++){constkey="property"+i;assertEquals(instance[key](),i);}})();