66 lines
1.1 KiB
JavaScript
66 lines
1.1 KiB
JavaScript
//@ skip if $model == "Apple Watch Series 3" # added by mark-jsc-stress-test.py
|
|
"use strict";
|
|
|
|
function assert(b, m) {
|
|
if (!b)
|
|
throw new Error("Bad:" + m);
|
|
}
|
|
noInline(assert);
|
|
|
|
function foo(p) {
|
|
function C() {
|
|
this.y = 42;
|
|
}
|
|
C.prototype = p;
|
|
let result = new C;
|
|
return result;
|
|
}
|
|
|
|
function bar(p) {
|
|
function C() {
|
|
this.y = 42;
|
|
}
|
|
C.prototype = p;
|
|
let result = new C;
|
|
return result;
|
|
}
|
|
|
|
function access(item) {
|
|
return item.x;
|
|
}
|
|
|
|
function makeLongChain(x) {
|
|
let item = {x:42};
|
|
for (let i = 0; i < x; ++i) {
|
|
item = {__proto__:item}
|
|
}
|
|
return item;
|
|
}
|
|
|
|
|
|
let p1 = makeLongChain(10);
|
|
let a = foo(p1);
|
|
let b = bar(p1);
|
|
b.__proto__ = makeLongChain(10);
|
|
function accessY(x) { return x.y; }
|
|
accessY(a);
|
|
accessY(b);
|
|
accessY(a);
|
|
accessY(b);
|
|
|
|
let start = Date.now();
|
|
for (let i = 0; i < 10000; ++i) {
|
|
let a = foo(p1);
|
|
for (let i = 0; i < 1000; ++i) {
|
|
assert(a.x === 42);
|
|
}
|
|
let proto = {x:42};
|
|
let b = bar(proto);
|
|
for (let i = 0; i < 100; ++i) {
|
|
assert(b.x === 42);
|
|
}
|
|
}
|
|
|
|
if (false)
|
|
print(Date.now() - start);
|