17979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 27979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Redistribution and use in source and binary forms, with or without 37979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// modification, are permitted provided that the following conditions are 47979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// met: 57979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// 67979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// * Redistributions of source code must retain the above copyright 77979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// notice, this list of conditions and the following disclaimer. 87979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// * Redistributions in binary form must reproduce the above 97979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// copyright notice, this list of conditions and the following 107979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// disclaimer in the documentation and/or other materials provided 117979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// with the distribution. 127979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// * Neither the name of Google Inc. nor the names of its 137979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// contributors may be used to endorse or promote products derived 147979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// from this software without specific prior written permission. 157979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// 167979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org 28a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org// Flags: --allow-natives-syntax 29a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org 307979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Regression test for GVN on field loads. 317979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org 327979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgfunction bar() {} 337979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org 347979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Make sure there is a transition on adding "bar" inobject property. 357979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgvar b = new bar(); 367979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgb.bar = "bar"; 377979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org 387979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgfunction test(a) { 397979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org var b = new Array(10); 407979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org for (var i = 0; i < 10; i++) { 417979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org b[i] = new bar(); 427979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org } 437979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org 447979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org for (var i = 0; i < 10; i++) { 457979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org b[i].bar = a.foo; 467979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org } 477979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org} 487979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org 497979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org// Create an object with fast backing store properties. 507979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgvar a = {}; 517979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p1 = ""; 527979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p2 = ""; 537979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p3 = ""; 547979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p4 = ""; 557979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p5 = ""; 567979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p6 = ""; 577979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p7 = ""; 587979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p8 = ""; 597979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p9 = ""; 607979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p10 = ""; 617979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.p11 = ""; 627979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orga.foo = "foo"; 63a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.orgfor (var i = 0; i < 5; i++) { 647979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org test(a); 657979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org} 66a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org%OptimizeFunctionOnNextCall(test); 67a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.orgtest(a); 687979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org 697979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgtest(""); 70