Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / v8 / test / mjsunit / array-push5.js
1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Flags: --allow-natives-syntax
6
7 var v = 0;
8
9 // Test that elements setters/getters on prototype chain set after the fact are
10 // property detected and don't lead to overzealous optimization.
11 var my_array_proto = {};
12 my_array_proto.__proto__ = [].__proto__;
13
14 function push_wrapper_2(array, value) {
15   array.push(value);
16 }
17 array = [];
18 array.__proto__ = my_array_proto;
19 push_wrapper_2(array, 66);
20 assertEquals(1, array.length);
21 assertEquals(0, v);
22 assertEquals(66, array[0]);
23 push_wrapper_2(array, 77);
24 assertEquals(2, array.length);
25 assertEquals(0, v);
26 assertEquals(77, array[1]);
27 %OptimizeFunctionOnNextCall(push_wrapper_2);
28 push_wrapper_2(array, 88);
29 assertEquals(3, array.length);
30 assertEquals(0, v);
31 assertEquals(88, array[2]);
32 assertOptimized(push_wrapper_2);
33 // Defining accessor should deopt optimized push.
34 Object.defineProperty(my_array_proto, "3", {
35 get: function() { return "get " + v; },
36 set: function(value) { v += value; }
37 });
38 assertUnoptimized(push_wrapper_2);
39 push_wrapper_2(array, 99);
40 assertEquals(4, array.length);
41 assertEquals(99, v);
42 assertEquals("get 99", array[3]);