| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- // Let/const redecl/reassign cases in presence of eval.
- // Eval creates its own block scope, preventing let and const variables from leaking out.
- function write(x) { WScript.Echo(x) }
- // Global scope.
- const z = 'global z';
- let w = 'global w';
- eval('let x = "global x"; const y = "global y"; write(z);');
- try { write(x); } catch (e) { write(e); }
- try { write(y); } catch (e) { write(e); }
- // Try redeclaration at global scope.
- try {
- eval('var z = "global var z";');
- }
- catch(e) {
- write(e);
- }
- try {
- eval('var w = "global var w";');
- }
- catch(e) {
- write(e);
- }
- // Block scope in global function.
- try {
- const z = 'global block z';
- eval('let x = "global block x"; const y = "global block y"; write(z);');
- try { write(x); } catch (e) { write(e); }
- try { write(y); } catch (e) { write(e); }
- // function declared in global block.
- outer();
- function outer() {
- let w = 'outer w';
- // Try redeclaration at function scope.
- try {
- eval('var w = "outer var w";');
- }
- catch(e) {
- write(e);
- }
- write(w);
- try {
- const z = 'outer z';
- eval('let x = "outer x"; const y = "outer y"; write(z);');
- try { write(x); } catch (e) { write(e); }
- try { write(y); } catch (e) { write(e); }
- // Try assigning const y; shouldn't see const y and instead create function var y
- eval('y = "outer var y";');
- write(y);
- // function nested within function body.
- inner();
- write(y);
- function inner() {
- let w = 'inner w';
- // Try redeclaration at function scope.
- try {
- eval('var w = "inner var w";');
- }
- catch(e) {
- write(e);
- }
- write(w);
- try {
- const z = 'inner z';
- // const y shouldn't affect outer y
- eval('let x = "inner x"; const y = "inner y"; write(z);');
- try { write(x); } catch (e) { write(e); }
- write(y); // outer var y
- }
- catch(e) {
- write(e);
- }
- function foo() {
- let yy = "b";
- const yx = "a";
- yy += "a";
- eval("WScript.Echo(yy);")
- WScript.Echo(yy);
- }
- foo();
- }
- }
- catch(e) {
- write(e);
- }
- }
- }
- catch(e) {
- write(e);
- }
- // BLUE Bug 454963 (shouldn't crash)
- {
- with ({})
- eval("");
- function f() { x; }
- let x;
- }
- this.eval('let x = 0; function f() { return x; }; WScript.Echo(f());');
|