50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
|
// 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);
|
||
|
}
|