function assert(cond) { if (!cond) throw new Error("broke assertion"); } noInline(assert); let foo = "foo"; const bar = "bar"; for (let i = 0; i < 1000; i++) { assert(foo === "foo"); assert(bar === "bar"); } eval("var INJECTION = 20"); for (let i = 0; i < 100; i++) { assert(foo === "foo"); assert(bar === "bar"); assert(INJECTION === 20); let threw = false; try { eval("var foo;"); } catch(e) { threw = true; assert(e.message.indexOf("Can't create duplicate global variable in eval") !== -1); } assert(threw); threw = false; try { eval("var bar;"); } catch(e) { threw = true; assert(e.message.indexOf("Can't create duplicate global variable in eval") !== -1); } assert(threw); assert(foo === "foo"); assert(bar === "bar"); assert(INJECTION === 20); } var flag = false; function baz() { if (flag) eval("var foo = 20;"); return foo; } for (var i = 0; i < 1000; i++) { assert(baz() === "foo"); assert(baz() === foo); } flag = true; for (var i = 0; i < 1000; i++) { assert(baz() === 20); }