diff options
Diffstat (limited to '')
-rw-r--r-- | js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-eval.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-eval.js b/js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-eval.js new file mode 100644 index 0000000000..9f4e4d7fe8 --- /dev/null +++ b/js/src/tests/non262/lexical-environment/block-scoped-functions-annex-b-eval.js @@ -0,0 +1,51 @@ +var log = ""; + +function f() { + log += g(); + function g() { return "outer-g"; } + + var o = { g: function () { return "with-g"; } }; + with (o) { + // Annex B.3.3.3 says g should be set on the nearest VariableEnvironment, + // and so should not change o.g. + eval(`{ + function g() { return "eval-g"; } + }`); + } + + log += g(); + log += o.g(); +} + +f(); + +function h() { + eval(` + // Should return true, as var bindings introduced by eval are configurable. + log += (delete q); + { + function q() { log += "q"; } + // Should return false, as lexical bindings introduced by eval are not + // configurable. + log += (delete q); + } + `); + return q; +} + +h()(); + +function f2() { + // Should not throw, just simply not synthesize an Annex B var in the eval + // because there's an outer const. + eval("{ function a() {} }"); + const a = 1; +} + +function f3() { + // As above, but for let. + eval("{ function a() {} }"); + let a; +} + +reportCompare(log, "outer-geval-gwith-gtruefalseq"); |