text: load("8b38e12cab5de21ec5393724c0d9b7dd.js");
  //-------------------------------------------------------------------------------------------------------
  // Copyright (C) Microsoft. All rights reserved.
  // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  //-------------------------------------------------------------------------------------------------------
  
  
  
  var stackAlloc = true;
  
  var g;
  function Ctor()
  {
      
  }
  
  function test(p)
  {
      var a;
      if (stackAlloc)
      {
          a = new Ctor();
          a.z = p + 0.1; // stack number
          a.escape = p + 0.2; // non stack number
      }
      else
      {
          a = new Ctor();
          g = a;
          a.z = p + 0.1   // non stack number
          a.escape = p + 0.2; // non stack number
      }
  
      
      a.x = a.z + 0.2;      // non stack number
      var c;
      if (stackAlloc)
      {  
          c = a;          // alias
      }    
      else
      {
          c = new Ctor();
      }
      c.y = p + 0.3;      // Still non stack number
  
      return a.escape;
  }
       
  WScript.Echo(test(0.1));
  stackAlloc = false;
  WScript.Echo(test(0.1));
  WScript.Echo(g.z);
  WScript.Echo(g.x);
  WScript.Echo(g.y);
  
  stackAlloc = true;
  WScript.Echo(test(0.1));
  stackAlloc = false;
  WScript.Echo(test(0.1));
  WScript.Echo(g.z);
  WScript.Echo(g.x);
  WScript.Echo(g.y);
  
  
  function test2(p)
  {
      var a;
      if (stackAlloc)
      {
          a = new Ctor();
          a.x = 1.1 + p; // stack number
      }
      else
      {
          a = new Ctor();
          a.x = 1.2 + p; // stack number
      }
  
      a.y = 1.3 + p; // stack number
  
  
      var c = a;
      c.z = 1.4 + p; // stack number
  }
  
  
  WScript.Echo("Test 2");
  stackAlloc = true;
  test2(0.1);
  stackAlloc = false;
  test2(0.1);
  
  stackAlloc = true;
  test2(0.1);
  stackAlloc = false;
  test2(0.1);
  
  function test3(p)
  {
      // Test loop dependencies
      var a = new Ctor();
      a.x = p + 1.1; // stack number
      a.y = p + 1.2; // stack number
  
      for (var i = 0; i < 2; i++)
      {
          var n = a.x;
          a.x = n + 1.1; // stack number;
  
  
          var q = a.y;
          a.y = i + 1.4; // not stack number, because q is a reference to this number and it is still live
          a.z = q;
          WScript.Echo("kill field hoist/copy prop");
      }
      var temp = a.y + 1.3;
      var temp2 = a.z + 1.3;
      WScript.Echo(temp);
      WScript.Echo(temp2);
  }
  
  
  WScript.Echo("Test 3");
  test3(0.1);
  test3(0.1);
  test3(0.1);
  
  
  var name = "y";
  function test4(p)
  {
      // Test array load escape
      var a = new Ctor();
      a.x = p + 1.1; // non-stack number since we don't know what name is
      a.y = a.x + 1.1;  // non-stack number since we don't know what name is
      return a[name];
  }
  
  WScript.Echo("Test 4");
  WScript.Echo(test4(0.1));
  WScript.Echo(test4(0.1));
  WScript.Echo(test4(0.1));
  WScript.Echo("Test 5");
  function test5(p)
  {
      // Test array load not escape
      var a = new Ctor();
      a.x = p + 1.1;          // stack number
      a.y = a.x + 1.1;        // stack number
      a[0] = p + 1.2;         // not stack number
      WScript.Echo(a[0]);     // non-escape use (as array index is known int
      return a[name] + 1.1;
  }
  
  WScript.Echo(test5(0.1));
  WScript.Echo(test5(0.1));
  WScript.Echo(test5(0.1));
  
  
  WScript.Echo("Test 6");
  function test6(p)
  {
      var a = new Ctor();
  
      // theoretically these can be mark temp, but the dependencies in the loop confuses the algorithm
      a.x = p + 1.1;          
      a.y = p + 1.2;
  
      for (var i = 0; i < 2; i++)
      {
          var n = a[name];
          a.y = i + 1.4;        // not stack number, because n  
          a.z = n;
      }
      WScript.Echo(a.z + 0.1);
  }
  
  test6(0.1);
  test6(0.1);
  test6(0.1);
  
  
  WScript.Echo("Test 7");
  var func = function (p)
  {
      return p+4.4;
  }
  function test7(p)
  {
      var lit = { prop1: p + 1.1, "14": 4.4, prop2: p+2.2, prop1: p+ 0.1, prop5: func(p), prop3: p+3.3 }; // stack numbers
      return lit.prop1 + lit.prop5;
  }
  
  WScript.Echo(test7(1));
  WScript.Echo(test7(1));
  
  var func = function(p)
  {
      return p + 5.5;
  }
  WScript.Echo(test7(1));
  
  
  
  WScript.Echo("Test 8")
  var obj = {};
  var func = function(p)
  {
      var alias = obj;
      var lit = { prop1: p + 0.1 }; // temp object and number
      var prop1;
      for (var i = 0;i < 1; i++)
      {
          prop1 = lit.prop1;    // hoisted field load, escape store
      }
      alias.prop1 = prop1;
  
  }
  
  func(0.1);
  func(0.1);
  func(0.1);
  WScript.Echo(obj.prop1);
  
  