OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --allow-natives-syntax --no-always-opt | 5 // Flags: --allow-natives-syntax |
6 | |
7 assertFalse(isAlwaysOptimize()); | |
8 | 6 |
9 var v = 0; | 7 var v = 0; |
10 | 8 |
11 // Test that elements setters/getters on prototype chain set after the fact are | 9 // Test that elements setters/getters on prototype chain set after the fact are |
12 // property detected and don't lead to overzealous optimization. | 10 // property detected and don't lead to overzealous optimization. |
13 var my_array_proto = {}; | 11 var my_array_proto = {}; |
14 my_array_proto.__proto__ = [].__proto__; | 12 my_array_proto.__proto__ = [].__proto__; |
15 | 13 |
16 function push_wrapper_2(array, value) { | 14 function push_wrapper_2(array, value) { |
17 array.push(value); | 15 array.push(value); |
(...skipping 17 matching lines...) Expand all Loading... |
35 // Defining accessor should deopt optimized push. | 33 // Defining accessor should deopt optimized push. |
36 Object.defineProperty(my_array_proto, "3", { | 34 Object.defineProperty(my_array_proto, "3", { |
37 get: function() { return "get " + v; }, | 35 get: function() { return "get " + v; }, |
38 set: function(value) { v += value; } | 36 set: function(value) { v += value; } |
39 }); | 37 }); |
40 assertUnoptimized(push_wrapper_2); | 38 assertUnoptimized(push_wrapper_2); |
41 push_wrapper_2(array, 99); | 39 push_wrapper_2(array, 99); |
42 assertEquals(4, array.length); | 40 assertEquals(4, array.length); |
43 assertEquals(99, v); | 41 assertEquals(99, v); |
44 assertEquals("get 99", array[3]); | 42 assertEquals("get 99", array[3]); |
OLD | NEW |