test262/implementation-contributed/javascriptcore/stress/poly-proto-custom-value-and-accessor.js
test262-automation e9a5a7f918 [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) (#1620)
* [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)
2018-07-03 15:59:58 -04:00

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);