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.
5 // Flags: --allow-natives-syntax
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__;
14 function push_wrapper_2(array, value) {
18 array.__proto__ = my_array_proto;
19 push_wrapper_2(array, 66);
20 assertEquals(1, array.length);
22 assertEquals(66, array[0]);
23 push_wrapper_2(array, 77);
24 assertEquals(2, array.length);
26 assertEquals(77, array[1]);
27 %OptimizeFunctionOnNextCall(push_wrapper_2);
28 push_wrapper_2(array, 88);
29 assertEquals(3, array.length);
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; }
38 assertUnoptimized(push_wrapper_2);
39 push_wrapper_2(array, 99);
40 assertEquals(4, array.length);
42 assertEquals("get 99", array[3]);