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