blob: 79014a7d19dad200f718f3be54a505511bc5f8a4 [file] [log] [blame]
function assert(b) {
if (!b)
throw new Error("bad value")
}
noInline(assert);
function random() {
return "blah";
}
noInline(random);
function identity(x) {
return x;
}
noInline(identity);
let o1 = {
g: 20,
y: 40,
f: "get f"
};
let o2 = {
g: "g",
y: "y",
get f() {
return "get f";
}
}
let o4 = {};
let o3 = {
get f() {
throw new Error("blah");
}
}
function foo(o, a) {
let x = o.g;
let y = o.y;
let oo = identity(o);
let j = random();
try {
j = o.f;
} catch(e) {
assert(j === "blah");
assert(oo === o3);
return x + y + 1;
}
return x + y;
}
noInline(foo);
for (let i = 0; i < 100000; i++) {
if (i % 3 == 0) {
assert(foo(o1) === 60);
} else if (i % 3 === 1) {
assert(foo(o2) === "gy");
} else {
foo(o4);
}
}
foo(o3);