| //------------------------------------------------------------------------------------------------------- |
| // 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); |
| } |