//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- // Test behavior of cached scopes. // For instance, make sure we do the right thing in same-named-formals cases. // 1. Case where function with a cached scope has "arguments". function f1(x, x) { WScript.Echo(x); eval('arguments[0] = 0'); eval('arguments[1] = 1'); WScript.Echo(x); } // Call f from inside a loop to force the scope to be cached. for (var i = 0; i < 1; i++) { f1('arg 0', 'arg 1'); } // 2. Case with no "arguments" in the cached-scope function itself. function f2(x, x) { WScript.Echo(x); function g() { eval('x = "arg 1"'); } g(); WScript.Echo(x); } // Call f from inside a loop to force the scope to be cached. for (var i = 0; i < 1; i++) { f2('arg 0'); } // 3. Case where nested function is cached and then undeferred (execute with /forcedeferparse). function f3(i) { function inner() { WScript.Echo('inner'); } if (i % 2 != 0) { return eval('inner()'); } f3(i + 1); } for (i = 0; i < 2; i++) f3(i); try { new Function("let ifviki, eval = (z = /x/g );L:switch(z) { case eval(\"z\"): return 503599627370497;break; }")(); } catch(e) { WScript.Echo(e.message); }