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(); | |
} | |
})(); |