1de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 2de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// Redistribution and use in source and binary forms, with or without 3de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// modification, are permitted provided that the following conditions are 4de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// met: 5de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// 6de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// * Redistributions of source code must retain the above copyright 7de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// notice, this list of conditions and the following disclaimer. 8de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// * Redistributions in binary form must reproduce the above 9de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// copyright notice, this list of conditions and the following 10de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// disclaimer in the documentation and/or other materials provided 11de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// with the distribution. 12de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// * Neither the name of Google Inc. nor the names of its 13de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// contributors may be used to endorse or promote products derived 14de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// from this software without specific prior written permission. 15de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// 16de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 28de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org// Flags: --allow-natives-syntax 29de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 30de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgfunction crash(obj) { 31de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org return obj.foo; 32de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org} 33de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 34de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgfunction base(number_of_properties) { 35de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org var result = new Array(); 36de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org for (var i = 0; i < number_of_properties; i++) { 37de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org result["property" + i] = "value" + i; 38de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org } 39de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org result.foo = number_of_properties; 40de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org return result; 41de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org} 42de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 43de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgvar a = base(12); 44de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgvar b = base(13); 45de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgvar c = base(14); 46de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgvar d = base(15); 47de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 48de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgcrash(a); // Premonomorphic. 49de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgcrash(a); 50de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgcrash(b); 51de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgcrash(c); 52de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgcrash(d); // Polymorphic, degree 4. 53de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 54de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org//Prepare ElementsKind transition map chain. 55de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgvar x = base(13); 56de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgx[0] = "object"; 57de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgx = base(14); 58de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgx[0] = "object"; 59de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgx = base(15); 60de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgx[0] = "object"; 61de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org 62de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.org%OptimizeFunctionOnNextCall(crash); 63de0db002768654f346a9059d80ab47602018bfa0yangguo@chromium.orgcrash(a); 64