blob: 9c39b9157ac8ba44ad53fd3479e1204c0424e43b [file] [log] [blame]
function truth() {
return true;
}
noInline(truth);
function assert(cond) {
if (!cond)
throw new Error("broke assertion");
}
noInline(assert);
;(function() {
function foo() {
let x = 40;
with ({x : 100}) {
assert(x === 100);
}
with ({y : 100}) {
assert(x === 40);
}
}
noInline(foo);
function bar() {
let x = 40;
function capX() { return x; }
with ({x : 100}) {
if (truth()) {
let x = 50;
let capX = function() { return x; }
assert(x === 50);
assert(capX() === x);
}
assert(x === 100);
assert(capX() === 40);
}
with ({y : 100}) {
if (truth()) {
let x = 50;
let capX = function() { return x; }
assert(x === 50);
assert(capX() === x);
}
assert(x === 40);
assert(capX() === 40);
}
}
noInline(bar);
function baz() {
let x = 40;
function capX() { return x; }
with ({x : 100}) {
if (truth()) {
let x = 50;
assert(x === 50);
}
assert(x === 100);
assert(capX() === 40);
}
with ({y : 100}) {
if (truth()) {
let x = 50;
assert(x === 50);
}
assert(x === 40);
assert(capX() === 40);
}
}
noInline(baz);
for (let i = 0; i < 100; i++) {
foo();
bar();
baz();
}
})();