function foo(o, a) { | |
let x = o.g; | |
let y = o.y; | |
try { | |
o.f = 20; | |
} catch(e) { | |
return x + y + 1; | |
} | |
return x + y; | |
} | |
function assert(b) { | |
if (!b) | |
throw new Error("bad value") | |
} | |
noInline(assert); | |
noInline(foo); | |
var flag = false; | |
function f(arg1, arg2, arg3) { | |
if (flag) | |
throw new Error("blah") | |
return arg1; | |
} | |
noInline(f); | |
let o1 = { | |
g: 20, | |
y: 40, | |
f: null | |
}; | |
let o2 = { | |
g: "g", | |
y: "y", | |
set f(v) { if (flag) throw new Error("blah"); } | |
} | |
for (let i = 0; i < 100000; i++) { | |
if (i % 2) { | |
assert(foo(o1) === 60); | |
} else { | |
assert(foo(o2) === "gy"); | |
} | |
} | |
flag = true; | |
assert(foo(o2) === "gy1"); |