| 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 | 5 // Flags: --allow-natives-syntax |
| 6 | 6 |
| 7 function testAdd(mode) { | 7 function testAdd(mode) { |
| 8 var a = []; | 8 var a = []; |
| 9 Object.defineProperty(a, "length", { writable : false}); | 9 Object.defineProperty(a, "length", { writable : false}); |
| 10 | 10 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 check(splice); | 44 check(splice); |
| 45 check(splice); | 45 check(splice); |
| 46 %OptimizeFunctionOnNextCall(splice); | 46 %OptimizeFunctionOnNextCall(splice); |
| 47 check(splice); | 47 check(splice); |
| 48 } | 48 } |
| 49 | 49 |
| 50 testAdd("fast properties"); | 50 testAdd("fast properties"); |
| 51 | 51 |
| 52 testAdd("normalized"); | 52 testAdd("normalized"); |
| 53 | 53 |
| 54 function testRemove(mode) { | 54 function testRemove(a, mode) { |
| 55 var a = [1, 2, 3]; | |
| 56 Object.defineProperty(a, "length", { writable : false}); | 55 Object.defineProperty(a, "length", { writable : false}); |
| 57 | 56 |
| 58 function check(f) { | 57 function check(f) { |
| 59 assertThrows(function() { f(a) }, TypeError); | 58 assertThrows(function() { f(a) }, TypeError); |
| 60 assertEquals(3, a.length); | 59 assertEquals(3, a.length); |
| 61 } | 60 } |
| 62 | 61 |
| 63 if (mode == "fast properties") %ToFastProperties(a); | 62 if (mode == "fast properties") %ToFastProperties(a); |
| 64 | 63 |
| 65 function pop(a) { | 64 function pop(a) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 84 | 83 |
| 85 function splice(a) { | 84 function splice(a) { |
| 86 a.splice(0, 1); | 85 a.splice(0, 1); |
| 87 } | 86 } |
| 88 | 87 |
| 89 check(splice); | 88 check(splice); |
| 90 check(splice); | 89 check(splice); |
| 91 check(splice); | 90 check(splice); |
| 92 %OptimizeFunctionOnNextCall(splice); | 91 %OptimizeFunctionOnNextCall(splice); |
| 93 check(splice); | 92 check(splice); |
| 93 |
| 94 %ClearFunctionTypeFeedback(pop); |
| 95 %ClearFunctionTypeFeedback(shift); |
| 96 %ClearFunctionTypeFeedback(splice); |
| 94 } | 97 } |
| 95 | 98 |
| 96 testRemove("fast properties"); | 99 for (var i = 0; i < 3; i++) { |
| 97 | 100 var a = [1, 2, 3]; |
| 98 testRemove("normalized"); | 101 if (i == 1) { |
| 102 a = [1, 2, 3.5]; |
| 103 } else if (i == 2) { |
| 104 a = [1, 2, "string"]; |
| 105 } |
| 106 testRemove(a, "fast properties"); |
| 107 testRemove(a, "normalized"); |
| 108 } |
| 99 | 109 |
| 100 var b = []; | 110 var b = []; |
| 101 Object.defineProperty(b.__proto__, "0", { | 111 Object.defineProperty(b.__proto__, "0", { |
| 102 set : function(v) { | 112 set : function(v) { |
| 103 b.x = v; | 113 b.x = v; |
| 104 Object.defineProperty(b, "length", { writable : false }); | 114 Object.defineProperty(b, "length", { writable : false }); |
| 105 }, | 115 }, |
| 106 get: function() { | 116 get: function() { |
| 107 return b.x; | 117 return b.x; |
| 108 } | 118 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 } | 157 } |
| 148 }); | 158 }); |
| 149 | 159 |
| 150 try { | 160 try { |
| 151 b.unshift(3, 4, 5); | 161 b.unshift(3, 4, 5); |
| 152 } catch(e) { } | 162 } catch(e) { } |
| 153 | 163 |
| 154 assertFalse(2 in b); | 164 assertFalse(2 in b); |
| 155 assertFalse(3 in b); | 165 assertFalse(3 in b); |
| 156 assertEquals(2, b.length); | 166 assertEquals(2, b.length); |
| OLD | NEW |