mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 14:30:27 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
96 lines
2.1 KiB
JavaScript
96 lines
2.1 KiB
JavaScript
var createCustomTestGetterSetter = $vm.createCustomTestGetterSetter;
|
|
|
|
function assert(b, m) {
|
|
if (!b)
|
|
throw new Error("Bad:" + m);
|
|
}
|
|
|
|
function makePolyProtoObject() {
|
|
function foo() {
|
|
class C {
|
|
constructor() { this.field = 20; }
|
|
};
|
|
return new C;
|
|
}
|
|
for (let i = 0; i < 15; ++i) {
|
|
assert(foo().field === 20);
|
|
}
|
|
return foo();
|
|
}
|
|
|
|
let items = [
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
makePolyProtoObject(),
|
|
];
|
|
|
|
let customGetterSetter = createCustomTestGetterSetter();
|
|
items.forEach((x) => {
|
|
x.__proto__ = customGetterSetter;
|
|
assert(x.__proto__ === customGetterSetter);
|
|
});
|
|
|
|
function validate(x, valueResult, accessorResult) {
|
|
assert(x.customValue === valueResult);
|
|
|
|
assert(x.customAccessor === accessorResult);
|
|
|
|
let o = {};
|
|
x.customValue = o;
|
|
assert(o.result === valueResult);
|
|
|
|
o = {};
|
|
x.customAccessor = o;
|
|
assert(o.result === accessorResult);
|
|
|
|
assert(x.randomProp === 42 || x.randomProp === undefined);
|
|
}
|
|
noInline(validate);
|
|
|
|
|
|
let start = Date.now();
|
|
for (let i = 0; i < 10000; ++i) {
|
|
for (let i = 0; i < items.length; ++i) {
|
|
validate(items[i], customGetterSetter, items[i]);
|
|
}
|
|
}
|
|
|
|
customGetterSetter.randomProp = 42;
|
|
|
|
for (let i = 0; i < 10000; ++i) {
|
|
for (let i = 0; i < items.length; ++i) {
|
|
validate(items[i], customGetterSetter, items[i]);
|
|
}
|
|
}
|
|
|
|
items.forEach((x) => {
|
|
Reflect.setPrototypeOf(x, {
|
|
get customValue() { return 42; },
|
|
get customAccessor() { return 22; },
|
|
set customValue(x) { x.result = 42; },
|
|
set customAccessor(x) { x.result = 22; },
|
|
});
|
|
});
|
|
|
|
for (let i = 0; i < 10000; ++i) {
|
|
for (let i = 0; i < items.length; ++i) {
|
|
validate(items[i], 42, 22);
|
|
}
|
|
}
|
|
|
|
if (false)
|
|
print(Date.now() - start);
|