| // Copyright 2018 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 |
| |
| // Create {count} property assignments. |
| function createPropertiesAssignment(count) { |
| let result = ""; |
| for (let i = 0; i < count; i++) { |
| result += "this.p"+i+" = undefined;"; |
| } |
| return result; |
| } |
| |
| function testSubclassProtoProperties(count) { |
| const MyClass = eval(`(class MyClass { |
| constructor() { |
| ${createPropertiesAssignment(count)} |
| } |
| });`); |
| |
| class BaseClass {}; |
| class SubClass extends BaseClass { |
| constructor() { |
| super() |
| } |
| }; |
| |
| const boundMyClass = MyClass.bind(); |
| %HeapObjectVerify(boundMyClass); |
| |
| SubClass.__proto__ = boundMyClass; |
| var instance = new SubClass(); |
| |
| %HeapObjectVerify(instance); |
| // Create some more instances to complete in-object slack tracking. |
| let results = []; |
| for (let i = 0; i < 4000; i++) { |
| results.push(new SubClass()); |
| } |
| var instance = new SubClass(); |
| %HeapObjectVerify(instance); |
| } |
| |
| |
| for (let count = 0; count < 10; count++) { |
| testSubclassProtoProperties(count); |
| } |