1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2013 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Redistribution and use in source and binary forms, with or without 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// modification, are permitted provided that the following conditions are 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// met: 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// * Redistributions of source code must retain the above copyright 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// notice, this list of conditions and the following disclaimer. 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// * Redistributions in binary form must reproduce the above 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// copyright notice, this list of conditions and the following 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// disclaimer in the documentation and/or other materials provided 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// with the distribution. 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// * Neither the name of Google Inc. nor the names of its 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// contributors may be used to endorse or promote products derived 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// from this software without specific prior written permission. 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Flags: --allow-natives-syntax 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch%NeverOptimizeFunction(test); 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction test() { 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var iteration_count = 1; 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch function transition1(a, i, v) { 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a[i] = v; 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Test PACKED SMI -> PACKED DOUBLE 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var a1 = [0, 1, 2, 3, 4]; 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition1(a1, 0, 2.5); 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var a2 = [0, 1, 2, 3, 4]; 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition1(a2, 0, 2.5); 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(%HasFastHoleyElements(a2)); 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch %OptimizeFunctionOnNextCall(transition1); 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var a3 = [0, 1, 2, 3, 4]; 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastSmiElements(a3)); 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition1(a3, 0, 2.5); 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(%HasFastHoleyElements(a3)); 54b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(4, a3[4]); 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(2.5, a3[0]); 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Test handling of hole. 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var a4 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a4.length = 7; 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastSmiElements(a4)); 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition1(a4, 0, 2.5); 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertFalse(%HasFastHoleyElements(a4)); 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(2.5, a4[0]); 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(undefined, a4[8]); 65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Large array should deopt to runtimea 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (j = 0; j < iteration_count; ++j) { 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a5 = new Array(); 69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (i = 0; i < 0x40000; ++i) { 70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a5[i] = 0; 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastSmiElements(a5) || %HasFastDoubleElements(a5)); 73b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition1(a5, 0, 2.5); 74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(2.5, a5[0]); 75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 76b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 77b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 78b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Test HOLEY SMI -> HOLEY DOUBLE 79b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 80b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 81b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch function transition2(a, i, v) { 82b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a[i] = v; 83b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 84b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var b1 = [0, 1, 2, , 4]; 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition2(b1, 0, 2.5); 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var b2 = [0, 1, 2, , 4]; 88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition2(b2, 0, 2.5); 89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(b2)); 90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch %OptimizeFunctionOnNextCall(transition2); 91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var b3 = [0, 1, 2, , 4]; 93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastSmiElements(b3)); 94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(b3)); 95b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition2(b3, 0, 2.5); 96b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(b3)); 97b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(4, b3[4]); 98b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(2.5, b3[0]); 99b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 100b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Large array should deopt to runtime 101b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (j = 0; j < iteration_count; ++j) { 102b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch b4 = [0, ,0]; 103b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (i = 3; i < 0x40000; ++i) { 104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch b4[i] = 0; 105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 106b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastSmiElements(b4)); 107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition2(b4, 0, 2.5); 108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(2.5, b4[0]); 109b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 110b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 111b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Test PACKED DOUBLE -> PACKED OBJECT 113b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 114b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 115b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch function transition3(a, i, v) { 116b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a[i] = v; 117b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 118b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 119b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var c1 = [0, 1, 2, 3.5, 4]; 120b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition3(c1, 0, new Object()); 121b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var c2 = [0, 1, 2, 3.5, 4]; 122b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition3(c2, 0, new Object()); 123b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastObjectElements(c2)); 124b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(!%HasFastHoleyElements(c2)); 125b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch %OptimizeFunctionOnNextCall(transition3); 126b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 127b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var c3 = [0, 1, 2, 3.5, 4]; 128b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastDoubleElements(c3)); 129b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(!%HasFastHoleyElements(c3)); 130b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition3(c3, 0, new Array()); 131b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(!%HasFastHoleyElements(c3)); 132b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastObjectElements(c3)); 133b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(4, c3[4]); 134b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(0, c3[0].length); 135b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 136b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Large array under the deopt threshold should be able to trigger GC without 137b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // causing crashes. 138b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (j = 0; j < iteration_count; ++j) { 139b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch c4 = [0, 2.5, 0]; 140b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (i = 3; i < 0xa000; ++i) { 141b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch c4[i] = 0; 142b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 143b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastDoubleElements(c4)); 144b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(!%HasFastHoleyElements(c4)); 145b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition3(c4, 0, new Array(5)); 146b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(!%HasFastHoleyElements(c4)); 147b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastObjectElements(c4)); 148b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(5, c4[0].length); 149b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 150b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 151b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Large array should deopt to runtime 152b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (j = 0; j < iteration_count; ++j) { 153b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch c5 = [0, 2.5, 0]; 154b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (i = 3; i < 0x40000; ++i) { 155b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch c5[i] = 0; 156b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 157b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastDoubleElements(c5)); 158b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(!%HasFastHoleyElements(c5)); 159b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition3(c5, 0, new Array(5)); 160b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(!%HasFastHoleyElements(c5)); 161b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastObjectElements(c5)); 162b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(5, c5[0].length); 163b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 164b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 165b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 166b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Test HOLEY DOUBLE -> HOLEY OBJECT 167b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // 168b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 169b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch function transition4(a, i, v) { 170b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch a[i] = v; 171b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 172b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 173b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var d1 = [0, 1, , 3.5, 4]; 174b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition4(d1, 0, new Object()); 175b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var d2 = [0, 1, , 3.5, 4]; 176b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition4(d2, 0, new Object()); 177b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastObjectElements(d2)); 178b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(d2)); 179b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch %OptimizeFunctionOnNextCall(transition4); 180b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 181b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var d3 = [0, 1, , 3.5, 4]; 182b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastDoubleElements(d3)); 183b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(d3)); 184b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition4(d3, 0, new Array()); 185b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(d3)); 186b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastObjectElements(d3)); 187b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(4, d3[4]); 188b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(0, d3[0].length); 189b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 190b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Large array under the deopt threshold should be able to trigger GC without 191b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // causing crashes. 192b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (j = 0; j < iteration_count; ++j) { 193b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch d4 = [, 2.5, ,]; 194b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (i = 3; i < 0xa000; ++i) { 195b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch d4[i] = 0; 196b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 197b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastDoubleElements(d4)); 198b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(d4)); 199b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition4(d4, 0, new Array(5)); 200b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(d4)); 201b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastObjectElements(d4)); 202b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(5, d4[0].length); 203b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(undefined, d4[2]); 204b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 205b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 206b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch // Large array should deopt to runtime 207b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (j = 0; j < iteration_count; ++j) { 208b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch d5 = [, 2.5, ,]; 209b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch for (i = 3; i < 0x40000; ++i) { 210b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch d5[i] = 0; 211b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 212b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastDoubleElements(d5)); 213b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(d5)); 214b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch transition4(d5, 0, new Array(5)); 215b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastHoleyElements(d5)); 216b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertTrue(%HasFastObjectElements(d5)); 217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(5, d5[0].length); 218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(undefined, d5[2]); 219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 220b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 221b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 222b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochtest(); 223