blob: 70c730f607145794ef6852b11096fe1912a23042 [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); }
var x = ['x'];
x.call1 = function() { write('In x.call1: this = ' + this) };
var y = ['y'];
y.call1 = function() { write('In y.call1: this = ' + this) };
function call1()
{
write('In call1: this = ' + this);
}
function call2()
{
write('In call2: this = ' + this);
}
var savecall1 = call1;
call1(call1 = call2);
call1 = savecall1;
savecall1 = x.call1;
x.call1(x.call1 = call1);
x.call1 = savecall1;
var savex = x;
x.call1(x.call1 = y.call1);
x = savex;
x.call1 = savecall1;
var s = 'call1';
x[x = s]();
x = savex;
x[s](s = 'call2');
s = 'call1';
x[s](x[s] = y.call1);
x[s] = x.call1;
(function() {
// Now try the same set of stuff when call target components are local.
var x = ['x'];
x.call1 = function() { write('In x.call1: this = ' + this) };
var y = ['y'];
y.call1 = function() { write('In y.call1: this = ' + this) };
function call1()
{
write('In call1: this = ' + this);
}
function call2()
{
write('In call2: this = ' + this);
}
var savecall1 = call1;
call1(call1 = call2);
call1 = savecall1;
savecall1 = x.call1;
x.call1(x.call1 = call1);
x.call1 = savecall1;
var savex = x;
x.call1(x.call1 = y.call1);
x = savex;
x.call1 = savecall1;
var s = 'call1';
x[x = s]();
x = savex;
x[s](s = 'call2');
s = 'call1';
x[s](x[s] = y.call1);
x[s] = x.call1;
})();
(function() {
var evalExpr = '' +
'var x = ["x"];' +
'x.call1 = function() { write("In x.call1: this = " + this) };' +
'var y = ["y"];' +
'y.call1 = function() { write("In y.call1: this = " + this) };' +
'function call1()' +
'{' +
'write("In call1: this = " + this);' +
'}' +
'function call2()' +
'{' +
'write("In call2: this = " + this);' +
'}' +
'var savecall1 = call1;' +
'call1(call1 = call2);' +
'call1 = savecall1;' +
'savecall1 = x.call1;' +
'x.call1(x.call1 = call1);' +
'x.call1 = savecall1;' +
'var savex = x;' +
'x.call1(x.call1 = y.call1);' +
'x = savex;' +
'x.call1 = savecall1;' +
'var s = "call1";' +
'x[x = s]();' +
'x = savex;' +
'x[s](s = "call2");' +
's = "call1";' +
'x[s](x[s] = y.call1);' +
'x[s] = x.call1;';
eval(evalExpr);
})();
// Verify that we assign regs properly in a compound assignment to function call result.
// Note: this will cease to be a valid test when early reference errors are thrown by default.
function test5921858() {
function eval([]){}
function shapeyConstructor(fujzty){
Object.defineProperty(this, "a",
({value: ((eval("true", window)) ^= z), writable: true, configurable: false}));
}
}