//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

function echo(m) { this.WScript ? WScript.Echo(m) : console.log(m); }

//
// Win8: 762166
// ES5 11.2.2 "new MemberExpression Arguments", MemberExpression is fully evaluated before Arguments.
// Arguments side effect can't change the constructor used for new operator.
//

(function(){
    function x(){ echo("x");}
    function y(){ echo("y");}
    
    new x(x = y);
    new x();
})();
   
(function(){
    function x(){ echo("x");}
    function y(){ echo("y");}
    
    new x(x = y);
    new x();
    
    function foo() {
        x(); // Reference of "x" and put it in slot
    }
})();

(function () {
    var o = {
        x: function () { echo("x"); }
    };
    function y() { echo("y"); }

    new o.x(o.x = y);
    new o.x();
})();

(function () {
    var o = {
        x: function () { echo("x"); }
    };
    var y = {
        x: function () { echo("y"); }
    };

    new o.x(o = y);
    new o.x();
})();
