blob: 7e7dd17cdce8abe2c62d926bee95ac731975d78c [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
function write(v) { WScript.Echo(v + ""); }
// Change arguments inside eval
function ArgInEval1() {
var old = arguments;
eval('arguments="test1"');
write("old.length : " + old.length);
write("arguments.length : " + arguments.length);
write("Compare the two : " + (old === arguments));
}
ArgInEval1(10);
function ArgInEval2() {
var old = arguments;
eval('write(arguments); var arguments = "test2"; write(arguments);');
write("old.length : " + old.length);
write("arguments.length : " + arguments.length);
write("Compare the two : " + (old === arguments));
}
ArgInEval2(10);
function sameNameFormal(x, x) {
var x = 999;
write(arguments[0]);
write(arguments[1]);
}
sameNameFormal(1, 2);
function bug1127540(a, b, c, d) {
eval("function foo(){return arguments.caller;}");
write("bug1127540: " + (foo() === arguments));
}
bug1127540(1, 2, 3, 4)
function DelArgs(a) {
write(arguments[0]);
delete arguments[0];
write(arguments[0]);
arguments[0] = 2;
write(arguments[0]);
delete arguments[0];
write(arguments[0]);
}
DelArgs(1);
// Parent function doesn't use arguments. Modify function.arguments in child
function Func1(a, b, c) {
a = "assignToFormal";
Func1.arguments[1] = "funcArgs[1]";
Func1_Helper();
write("Arguments : " + Func1.arguments[0] + " " + Func1.arguments[1] + " " + Func1.arguments[2]);
write("Formals : " + a + " " + b + " " + c);
}
function Func1_Helper() {
Func1.arguments[2] = "nested[2]";
write("In Helper : " + Func1.arguments[0] + " " + Func1.arguments[1] + " " + Func1.arguments[2]);
}
Func1("arg1", "arg2", "arg3");
// Parent function uses arguments. Modify function.arguments in child
function Func2(a, b, c) {
a = "assignToFormal";
Func2.arguments[1] = "funcArgs[1]";
arguments[2] = "arguments[2]";
Func2_Helper();
write("Arguments : " + Func2.arguments[0] + " " + Func2.arguments[1] + " " + Func2.arguments[2]);
write("Formals : " + a + " " + b + " " + c);
}
function Func2_Helper() {
Func2.arguments[2] = "nested[2]";
write("In Helper : " + Func2.arguments[0] + " " + Func2.arguments[1] + " " + Func2.arguments[2]);
}
Func2("arg1", "arg2", "arg3");
function argEscapes(x)
{
return arguments;
}
do
{
// Put this in a loop so we'll try to apply the scope-caching optimization.
var argSave = argEscapes('First call');
WScript.Echo(argSave[0]);
var argSave2 = argEscapes('Second call');
WScript.Echo(argSave[0]);
WScript.Echo(argSave2[0]);
}
while(0);
function argEscapesViaEval(x)
{
return eval('arguments');
}
do
{
// Put this in a loop so we'll try to apply the scope-caching optimization.
var argSave = argEscapesViaEval('First call');
WScript.Echo(argSave[0]);
var argSave2 = argEscapesViaEval('Second call');
WScript.Echo(argSave[0]);
WScript.Echo(argSave2[0]);
}
while(0);