1// Copyright 2013 the V8 project authors. All rights reserved. 2// Redistribution and use in source and binary forms, with or without 3// modification, are permitted provided that the following conditions are 4// met: 5// 6// * Redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer. 8// * Redistributions in binary form must reproduce the above 9// copyright notice, this list of conditions and the following 10// disclaimer in the documentation and/or other materials provided 11// with the distribution. 12// * Neither the name of Google Inc. nor the names of its 13// contributors may be used to endorse or promote products derived 14// from this software without specific prior written permission. 15// 16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28// Flags: --allow-natives-syntax 29 30var a = {}; 31a.x = 1 32a.y = 1.5 33 34var b = {} 35b.x = 1.5; 36b.y = 1; 37 38var c = {} 39c.x = 1.5; 40 41var d = {} 42d.x = 1.5; 43 44var e = {} 45e.x = 1.5; 46 47var f = {} 48f.x = 1.5; 49 50var g = {} 51g.x = 1.5; 52 53var h = {} 54h.x = 1.5; 55 56var i = {} 57i.x = 1.5; 58 59var o = {} 60var p = {y : 10, z : 1} 61o.__proto__ = p; 62delete p.z 63 64function foo(v, w) { 65 // Make load via IC in optimized code. Its target will get overwritten by 66 // lazy deopt patch for the stack check. 67 v.y; 68 // Make store with transition to make this code dependent on the map. 69 w.y = 1; 70 return b.y; 71} 72 73foo(o, c); 74foo(o, d); 75foo(o, e); 76%OptimizeFunctionOnNextCall(foo); 77foo(b, f); 78foo(b, g); 79foo(b, h); 80foo(a, i); 81