11e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
21e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// Redistribution and use in source and binary forms, with or without
31e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// modification, are permitted provided that the following conditions are
41e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// met:
51e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//
61e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//     * Redistributions of source code must retain the above copyright
71e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//       notice, this list of conditions and the following disclaimer.
81e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//     * Redistributions in binary form must reproduce the above
91e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//       copyright notice, this list of conditions and the following
101e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//       disclaimer in the documentation and/or other materials provided
111e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//       with the distribution.
121e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//     * Neither the name of Google Inc. nor the names of its
131e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//       contributors may be used to endorse or promote products derived
141e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//       from this software without specific prior written permission.
151e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org//
161e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
171e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
181e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
191e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
201e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
211e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
221e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
231e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
241e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
251e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
261e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
271e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org
281e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org// This test requires OSR or --stress-runs=3 to optimize the top level script.
291e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org
301e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.orgfor (var i = 0; i < 3; i++) {
311e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  // HToFastProperties is used for top-level object literals that have
321e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  // function property.
331e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  var obj = {
341e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org    index: function() { return i; },
351e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org    x: 0
361e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  }
371e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  var n = 10000;
381e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  // Loop to hit OSR.
391e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  for (var j = 0; j < n; j++) {
401e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org    obj.x += i;
411e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  }
421e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org  assertEquals(obj.index() * n, obj.x);
431e71c4d02b6ae995c57bf1f7f3ce99a4ef88eba5mstarzinger@chromium.org}
44