text: // Copyright 2015 the V8 project authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  // Flags: --allow-natives-syntax --no-always-opt
  
  function literals_sharing_test(warmup, optimize) {
    function closure() {
      // Ensure small array literals start in specific element kind mode.
      assertTrue(%HasSmiElements([]));
      assertTrue(%HasSmiElements([1]));
      assertTrue(%HasSmiElements([1,2]));
      assertTrue(%HasDoubleElements([1.1]));
      assertTrue(%HasDoubleElements([1.1,2]));
  
      var a = [1, 2, 3];
      if (warmup) {
        // Transition elements kind during warmup...
        assertTrue(%HasSmiElements(a));
        assertEquals(4, a.push(1.3));
      }
      // ... and ensure that the information about transitioning is
      // propagated to the next closure.
      assertTrue(%HasDoubleElements(a));
    };
    if (optimize) %OptimizeFunctionOnNextCall(closure);
    closure();
  }
  
  
  function test() {
    var warmup = true;
    for (var i = 0; i < 3; i++) {
      print("iter: " + i + ", warmup: "+ warmup);
      literals_sharing_test(warmup, false);
      warmup = false;
    }
    print("iter: " + i + ", opt: true");
    literals_sharing_test(warmup, true);
  }
  
  test();
  