Home | History | Annotate | Download | only in mjsunit
      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]);
     43