11510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 21510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Redistribution and use in source and binary forms, with or without 31510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// modification, are permitted provided that the following conditions are 41510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// met: 51510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 61510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// * Redistributions of source code must retain the above copyright 71510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// notice, this list of conditions and the following disclaimer. 81510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// * Redistributions in binary form must reproduce the above 91510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// copyright notice, this list of conditions and the following 101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// disclaimer in the documentation and/or other materials provided 111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// with the distribution. 121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// * Neither the name of Google Inc. nor the names of its 131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// contributors may be used to endorse or promote products derived 141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// from this software without specific prior written permission. 151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc 291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Flags: --track-allocation-sites --noalways-opt 301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Test element kind of objects. 321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Since --smi-only-arrays affects builtins, its default setting at compile 331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// time sticks if built with snapshot. If --smi-only-arrays is deactivated 341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// by default, only a no-snapshot build actually has smi-only arrays enabled 351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// in this test case. Depending on whether smi-only arrays are actually 361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// enabled, this test takes the appropriate code path to check smi-only arrays. 371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 38ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org// Reset the GC stress mode to be off. Needed because AllocationMementos only 39ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org// live for one gc, so a gc that happens in certain fragile areas of the test 40ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org// can break assumptions. 41ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org%SetFlags("--gc-interval=-1") 42ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8)); 441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgsupport_smi_only_arrays = true; 451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgif (support_smi_only_arrays) { 471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org print("Tests include smi-only arrays."); 481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} else { 491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org print("Tests do NOT include smi-only arrays."); 501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar elements_kind = { 531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org fast_smi_only : 'fast smi only elements', 541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org fast : 'fast elements', 551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org fast_double : 'fast double elements', 561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org dictionary : 'dictionary elements', 571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_byte : 'external byte elements', 581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_unsigned_byte : 'external unsigned byte elements', 591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_short : 'external short elements', 601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_unsigned_short : 'external unsigned short elements', 611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_int : 'external int elements', 621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_unsigned_int : 'external unsigned int elements', 631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_float : 'external float elements', 641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_double : 'external double elements', 651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org external_pixel : 'external pixel elements' 661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction getKind(obj) { 691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (%HasFastSmiElements(obj)) return elements_kind.fast_smi_only; 701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (%HasFastObjectElements(obj)) return elements_kind.fast; 711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (%HasFastDoubleElements(obj)) return elements_kind.fast_double; 721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (%HasDictionaryElements(obj)) return elements_kind.dictionary; 731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction isHoley(obj) { 761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (%HasFastHoleyElements(obj)) return true; 771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return false; 781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction assertKind(expected, obj, name_opt) { 811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (!support_smi_only_arrays && 821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org expected == elements_kind.fast_smi_only) { 831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org expected = elements_kind.fast; 841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertEquals(expected, getKind(obj), name_opt); 861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgif (support_smi_only_arrays) { 891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // Verify that basic elements kind feedback works for non-constructor 911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // array calls (as long as the call is made through an IC, and not 921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // a CallStub). 931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org (function (){ 941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org function create0() { 951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return Array(); 961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // Calls through ICs need warm up through uninitialized, then 991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // premonomorphic first. 1001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(); 1011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(); 1021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a = create0(); 1031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertKind(elements_kind.fast_smi_only, a); 1041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a[0] = 3.5; 1051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org b = create0(); 1061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertKind(elements_kind.fast_double, b); 1071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org function create1(arg) { 1091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return Array(arg); 1101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 1111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create1(0); 1131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create1(0); 1141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a = create1(0); 1151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertFalse(isHoley(a)); 1161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertKind(elements_kind.fast_smi_only, a); 1171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a[0] = "hello"; 1181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org b = create1(10); 1191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertTrue(isHoley(b)); 1201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertKind(elements_kind.fast, b); 1211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a = create1(100000); 1231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertKind(elements_kind.dictionary, a); 1241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org function create3(arg1, arg2, arg3) { 1261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return Array(arg1, arg2, arg3); 1271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 1281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create3(); 1301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create3(); 1311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a = create3(1,2,3); 1321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a[0] = 3.5; 1331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org b = create3(1,2,3); 1341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertKind(elements_kind.fast_double, b); 1351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertFalse(isHoley(b)); 1361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org })(); 1371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // Verify that keyed calls work 1401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org (function (){ 1411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org function create0(name) { 1421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return this[name](); 1431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 1441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org name = "Array"; 1461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(name); 1471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(name); 1481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a = create0(name); 1491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a[0] = 3.5; 1501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org b = create0(name); 1511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertKind(elements_kind.fast_double, b); 1521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org })(); 1531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // Verify that the IC can't be spoofed by patching 1561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org (function (){ 1571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org function create0() { 1581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return Array(); 1591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 1601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(); 1621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(); 1631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a = create0(); 1641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertKind(elements_kind.fast_smi_only, a); 1651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org var oldArray = this.Array; 1661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org this.Array = function() { return ["hi"]; }; 1671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org b = create0(); 1681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertEquals(["hi"], b); 1691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org this.Array = oldArray; 1701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org })(); 1711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // Verify that calls are still made through an IC after crankshaft, 1731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // though the type information is reset. 1741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // TODO(mvstanton): instead, consume the type feedback gathered up 1751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // until crankshaft time. 1761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org (function (){ 1771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org function create0() { 1781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return Array(); 1791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 1801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(); 1821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(); 1831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a = create0(); 1841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org a[0] = 3.5; 1851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org %OptimizeFunctionOnNextCall(create0); 1861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org create0(); 18793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org // This test only makes sense if crankshaft is allowed 18893a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org if (4 != %GetOptimizationStatus(create0)) { 18993a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org create0(); 19093a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org b = create0(); 19193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org assertKind(elements_kind.fast_smi_only, b); 19293a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org b[0] = 3.5; 19393a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org c = create0(); 19493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org assertKind(elements_kind.fast_double, c); 195ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org assertOptimized(create0); 19693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org } 1971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org })(); 1981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 1991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org // Verify that cross context calls work 2011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org (function (){ 2021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org var realmA = Realm.current(); 2031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org var realmB = Realm.create(); 2041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertEquals(0, realmA); 2051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertEquals(1, realmB); 2061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org function instanceof_check(type) { 2081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertTrue(type() instanceof type); 2091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertTrue(type(5) instanceof type); 2101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org assertTrue(type(1,2,3) instanceof type); 2111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 2121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 2131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org var realmBArray = Realm.eval(realmB, "Array"); 2141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org instanceof_check(Array); 2151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org instanceof_check(Array); 2161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org instanceof_check(Array); 2171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org instanceof_check(realmBArray); 2181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org instanceof_check(realmBArray); 2191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org instanceof_check(realmBArray); 2201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org })(); 2211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 222