blob: 753f21fd5a0177a5c53a1640d2741c61d924a0b2 [file] [log] [blame]
function assert(b) {
if (!b)
throw new Error("Bad value.")
}
noInline(assert);
var v1 = 100;
var v2 = 200;
var flag = false;
var o1 = {
get f() {
if (flag)
throw new Error("gotcha!");
return v1;
}
}
function a() { return "a"; }
noInline(a);
function b() { return "b"; }
noInline(b);
function c() { return "c"; }
noInline(c);
function d() { return "d"; }
noInline(d);
function e() { return "e"; }
noInline(e);
function f() { return "f"; }
noInline(f);
function g() { return "g"; }
noInline(g);
var o2 = {
get f() {
assert(true);
assert(true);
assert(true);
assert(true);
assert(true);
assert(true);
assert(true);
return v2;
}
}
function foo(o) {
try {
var _a = a();
var _b = b();
var _c = c();
var _d = d();
var _e = e();
var _f = f();
var _g = g();
o = o.f;
} catch(e) {
assert(o === o1);
assert(_b === "b");
assert(_c === "c");
assert(_d === "d");
assert(_e === "e");
assert(_f === "f");
assert(_g === "g");
}
}
noInline(foo);
for (var i = 0; i < 1000000; i++)
foo(i % 2 ? o1 : o2);
flag = true;
foo(o1);