1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved.
2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file.
4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Flags: --allow-natives-syntax
6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction push_wrapper(array, value) {
8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch  array.push(value);
9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}
10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch
11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Test that optimization of Array.push() for non-Arrays works correctly.
12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar object = { x : 8, length: 3 };
13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochobject[18] = 5;
14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochobject.__proto__ = Array.prototype;
15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochpush_wrapper(object, 1);
16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochpush_wrapper(object, 1);
17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(5, object.length);
18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch%OptimizeFunctionOnNextCall(push_wrapper);
19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochpush_wrapper(object, 1);
20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochpush_wrapper(object, 1);
21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(8, object.x);
22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochassertEquals(7, object.length);
23