18496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
28496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
38496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org// found in the LICENSE file.
48496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org
58496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org// Flags: --allow-natives-syntax
68496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org
78496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgfunction push_wrapper(array, value) {
88496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org  array.push(value);
98496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org}
108496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org
118496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org// Test that optimization of Array.push() for non-Arrays works correctly.
128496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgvar object = { x : 8, length: 3 };
138496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgobject[18] = 5;
148496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgobject.__proto__ = Array.prototype;
158496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgpush_wrapper(object, 1);
168496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgpush_wrapper(object, 1);
178496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgassertEquals(5, object.length);
188496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org%OptimizeFunctionOnNextCall(push_wrapper);
198496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgpush_wrapper(object, 1);
208496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgpush_wrapper(object, 1);
218496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgassertEquals(8, object.x);
228496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgassertEquals(7, object.length);
23