function assert(cond) { | |
if (!cond) | |
throw new Error("broke assertion"); | |
} | |
noInline(assert); | |
function shouldThrowInvalidConstAssignment(f) { | |
var threw = false; | |
try { | |
f(); | |
} catch(e) { | |
if (e.name.indexOf("TypeError") !== -1 && e.message.indexOf("readonly") !== -1) | |
threw = true; | |
} | |
assert(threw); | |
} | |
noInline(shouldThrowInvalidConstAssignment); | |
function makeObj() { | |
return {foo: 20}; | |
} | |
noInline(makeObj); | |
let foo = "foo"; | |
const bar = "bar"; | |
for (var i = 0; i < 100; i++) { | |
with (makeObj()) { | |
assert(foo === 20); | |
assert(bar === "bar"); | |
shouldThrowInvalidConstAssignment(function() { bar = 20; }); | |
} | |
} |