/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ var gTestfile = "eval-has-lexical-environment.js" //----------------------------------------------------------------------------- var BUGNUMBER = 1193583; var summary = "Eval always has a lexical environment"; /************** * BEGIN TEST * **************/ eval(` let foo = 42; const kay = foo; var bar = 84; function f() { return foo + kay; } `); (1, eval)(` let foo2 = 42; const kay2 = foo2; `); // Lexical declarations should not have escaped eval. assertEq(typeof foo, "undefined"); assertEq(typeof kay, "undefined"); assertEq(typeof foo2, "undefined"); assertEq(typeof kay2, "undefined"); // Eval'd functions can close over lexical bindings. assertEq(f(), 84); // Var can escape direct eval. assertEq(bar, 84); if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete");