//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

function print(x) { WScript.Echo(x+''); }

function inner(func) {
    print(func.caller);
    if (func.arguments)
    {
        print(func.arguments[0]);
        print(func.arguments.caller);
    }
    if (func.caller) {
        if (func.arguments.caller) {
            print(func.arguments.caller[0]);
        } else {
            print("func.arguments.caller undefined");
        }
    }
    print("");
}


function f() {
    inner(f);
    try {
        try {
            throw null;
        }
        finally {
            inner(g);
        }
    }
    catch (e) {
        inner(f);
    }
}

function g() {
    f("f from g");
}

f("f from global");
g("g from global");

function callerA() {
        AA(null);
}
function AA(x) {
        print(AA.caller);
}

function callerB() {
        eval("AB(null)");
}
function AB(x) {
        print(AB.caller);
}

callerA();
callerB();

(function() {
    print(arguments.caller);
    print(delete arguments.caller);
    print(arguments.caller);
    arguments.caller = 0;
    print(arguments.caller);
    function f() {
        print(arguments.caller);
        print(delete arguments.caller);
        print(arguments.caller);
        arguments.caller = 0;
        print(arguments.caller);
    }
    f();
})();

function test0(){
  var func0 = function(){
    var __loopvar1 = 0;
    while(((b <<= (arguments.caller && arguments.caller[1]) ? 3 : 1)) && __loopvar1 < 3) {
      __loopvar1++;
    }
  }
  var func2 = function(){
    func0(); 
  }
  var b = 1;
  function bar0 () {
      func2();
  }
  bar0(1, 1, 1); 
  WScript.Echo("b = " + (b|0));
};

// generate profile
test0(); 
test0(); 
