| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 "use strict"; | 5 "use strict"; |
| 6 | 6 |
| 7 // This file relies on the fact that the following declarations have been made | 7 // This file relies on the fact that the following declarations have been made |
| 8 // in runtime.js: | 8 // in runtime.js: |
| 9 // var $Array = global.Array; | 9 // var $Array = global.Array; |
| 10 | 10 |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 %MoveArrayContents(new_array, array); | 264 %MoveArrayContents(new_array, array); |
| 265 } | 265 } |
| 266 | 266 |
| 267 | 267 |
| 268 // This is part of the old simple-minded splice. We are using it either | 268 // This is part of the old simple-minded splice. We are using it either |
| 269 // because the receiver is not an array (so we have no choice) or because we | 269 // because the receiver is not an array (so we have no choice) or because we |
| 270 // know we are not deleting or moving a lot of elements. | 270 // know we are not deleting or moving a lot of elements. |
| 271 function SimpleSlice(array, start_i, del_count, len, deleted_elements) { | 271 function SimpleSlice(array, start_i, del_count, len, deleted_elements) { |
| 272 for (var i = 0; i < del_count; i++) { | 272 for (var i = 0; i < del_count; i++) { |
| 273 var index = start_i + i; | 273 var index = start_i + i; |
| 274 // The spec could also be interpreted such that %HasLocalProperty | 274 // The spec could also be interpreted such that %HasOwnProperty |
| 275 // would be the appropriate test. We follow KJS in consulting the | 275 // would be the appropriate test. We follow KJS in consulting the |
| 276 // prototype. | 276 // prototype. |
| 277 var current = array[index]; | 277 var current = array[index]; |
| 278 if (!IS_UNDEFINED(current) || index in array) { | 278 if (!IS_UNDEFINED(current) || index in array) { |
| 279 deleted_elements[i] = current; | 279 deleted_elements[i] = current; |
| 280 } | 280 } |
| 281 } | 281 } |
| 282 } | 282 } |
| 283 | 283 |
| 284 | 284 |
| 285 function SimpleMove(array, start_i, del_count, len, num_additional_args) { | 285 function SimpleMove(array, start_i, del_count, len, num_additional_args) { |
| 286 if (num_additional_args !== del_count) { | 286 if (num_additional_args !== del_count) { |
| 287 // Move the existing elements after the elements to be deleted | 287 // Move the existing elements after the elements to be deleted |
| 288 // to the right position in the resulting array. | 288 // to the right position in the resulting array. |
| 289 if (num_additional_args > del_count) { | 289 if (num_additional_args > del_count) { |
| 290 for (var i = len - del_count; i > start_i; i--) { | 290 for (var i = len - del_count; i > start_i; i--) { |
| 291 var from_index = i + del_count - 1; | 291 var from_index = i + del_count - 1; |
| 292 var to_index = i + num_additional_args - 1; | 292 var to_index = i + num_additional_args - 1; |
| 293 // The spec could also be interpreted such that | 293 // The spec could also be interpreted such that |
| 294 // %HasLocalProperty would be the appropriate test. We follow | 294 // %HasOwnProperty would be the appropriate test. We follow |
| 295 // KJS in consulting the prototype. | 295 // KJS in consulting the prototype. |
| 296 var current = array[from_index]; | 296 var current = array[from_index]; |
| 297 if (!IS_UNDEFINED(current) || from_index in array) { | 297 if (!IS_UNDEFINED(current) || from_index in array) { |
| 298 array[to_index] = current; | 298 array[to_index] = current; |
| 299 } else { | 299 } else { |
| 300 delete array[to_index]; | 300 delete array[to_index]; |
| 301 } | 301 } |
| 302 } | 302 } |
| 303 } else { | 303 } else { |
| 304 for (var i = start_i; i < len - del_count; i++) { | 304 for (var i = start_i; i < len - del_count; i++) { |
| 305 var from_index = i + del_count; | 305 var from_index = i + del_count; |
| 306 var to_index = i + num_additional_args; | 306 var to_index = i + num_additional_args; |
| 307 // The spec could also be interpreted such that | 307 // The spec could also be interpreted such that |
| 308 // %HasLocalProperty would be the appropriate test. We follow | 308 // %HasOwnProperty would be the appropriate test. We follow |
| 309 // KJS in consulting the prototype. | 309 // KJS in consulting the prototype. |
| 310 var current = array[from_index]; | 310 var current = array[from_index]; |
| 311 if (!IS_UNDEFINED(current) || from_index in array) { | 311 if (!IS_UNDEFINED(current) || from_index in array) { |
| 312 array[to_index] = current; | 312 array[to_index] = current; |
| 313 } else { | 313 } else { |
| 314 delete array[to_index]; | 314 delete array[to_index]; |
| 315 } | 315 } |
| 316 } | 316 } |
| 317 for (var i = len; i > len - del_count + num_additional_args; i--) { | 317 for (var i = len; i > len - del_count + num_additional_args; i--) { |
| 318 delete array[i - 1]; | 318 delete array[i - 1]; |
| (...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1068 | 1068 |
| 1069 var length = TO_UINT32(this.length); | 1069 var length = TO_UINT32(this.length); |
| 1070 if (length < 2) return this; | 1070 if (length < 2) return this; |
| 1071 | 1071 |
| 1072 var is_array = IS_ARRAY(this); | 1072 var is_array = IS_ARRAY(this); |
| 1073 var max_prototype_element; | 1073 var max_prototype_element; |
| 1074 if (!is_array) { | 1074 if (!is_array) { |
| 1075 // For compatibility with JSC, we also sort elements inherited from | 1075 // For compatibility with JSC, we also sort elements inherited from |
| 1076 // the prototype chain on non-Array objects. | 1076 // the prototype chain on non-Array objects. |
| 1077 // We do this by copying them to this object and sorting only | 1077 // We do this by copying them to this object and sorting only |
| 1078 // local elements. This is not very efficient, but sorting with | 1078 // own elements. This is not very efficient, but sorting with |
| 1079 // inherited elements happens very, very rarely, if at all. | 1079 // inherited elements happens very, very rarely, if at all. |
| 1080 // The specification allows "implementation dependent" behavior | 1080 // The specification allows "implementation dependent" behavior |
| 1081 // if an element on the prototype chain has an element that | 1081 // if an element on the prototype chain has an element that |
| 1082 // might interact with sorting. | 1082 // might interact with sorting. |
| 1083 max_prototype_element = CopyFromPrototype(this, length); | 1083 max_prototype_element = CopyFromPrototype(this, length); |
| 1084 } | 1084 } |
| 1085 | 1085 |
| 1086 // %RemoveArrayHoles returns -1 if fast removal is not supported. | 1086 // %RemoveArrayHoles returns -1 if fast removal is not supported. |
| 1087 var num_non_undefined = %RemoveArrayHoles(this, length); | 1087 var num_non_undefined = %RemoveArrayHoles(this, length); |
| 1088 | 1088 |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1525 )); | 1525 )); |
| 1526 | 1526 |
| 1527 SetUpLockedPrototype(InternalPackedArray, $Array(), $Array( | 1527 SetUpLockedPrototype(InternalPackedArray, $Array(), $Array( |
| 1528 "join", getFunction("join", ArrayJoin), | 1528 "join", getFunction("join", ArrayJoin), |
| 1529 "pop", getFunction("pop", ArrayPop), | 1529 "pop", getFunction("pop", ArrayPop), |
| 1530 "push", getFunction("push", ArrayPush) | 1530 "push", getFunction("push", ArrayPush) |
| 1531 )); | 1531 )); |
| 1532 } | 1532 } |
| 1533 | 1533 |
| 1534 SetUpArray(); | 1534 SetUpArray(); |
| OLD | NEW |