| 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 var $arrayConcat; | 5 var $arrayConcat; | 
| 6 var $arrayJoin; | 6 var $arrayJoin; | 
| 7 var $arrayPush; | 7 var $arrayPush; | 
| 8 var $arrayPop; | 8 var $arrayPop; | 
| 9 var $arrayShift; | 9 var $arrayShift; | 
| 10 var $arraySlice; | 10 var $arraySlice; | 
| 11 var $arraySplice; | 11 var $arraySplice; | 
| 12 var $arrayUnshift; | 12 var $arrayUnshift; | 
|  | 13 var $innerArrayForEach; | 
|  | 14 var $innerArrayEvery; | 
| 13 | 15 | 
| 14 (function(global, shared, exports) { | 16 (function(global, shared, exports) { | 
| 15 | 17 | 
| 16 "use strict"; | 18 "use strict"; | 
| 17 | 19 | 
| 18 %CheckIsBootstrapping(); | 20 %CheckIsBootstrapping(); | 
| 19 | 21 | 
| 20 var GlobalArray = global.Array; | 22 var GlobalArray = global.Array; | 
| 21 | 23 | 
| 22 // ------------------------------------------------------------------- | 24 // ------------------------------------------------------------------- | 
| (...skipping 1149 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1172       var new_receiver = needs_wrapper ? $toObject(receiver) : receiver; | 1174       var new_receiver = needs_wrapper ? $toObject(receiver) : receiver; | 
| 1173       if (%_CallFunction(new_receiver, element, i, array, f)) { | 1175       if (%_CallFunction(new_receiver, element, i, array, f)) { | 
| 1174         accumulator[accumulator_length++] = element; | 1176         accumulator[accumulator_length++] = element; | 
| 1175       } | 1177       } | 
| 1176     } | 1178     } | 
| 1177   } | 1179   } | 
| 1178   %MoveArrayContents(accumulator, result); | 1180   %MoveArrayContents(accumulator, result); | 
| 1179   return result; | 1181   return result; | 
| 1180 } | 1182 } | 
| 1181 | 1183 | 
| 1182 | 1184 function InnerArrayForEach(f, receiver, array, length) { | 
| 1183 function ArrayForEach(f, receiver) { |  | 
| 1184   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.forEach"); |  | 
| 1185 |  | 
| 1186   // Pull out the length so that modifications to the length in the |  | 
| 1187   // loop will not affect the looping and side effects are visible. |  | 
| 1188   var array = $toObject(this); |  | 
| 1189   var length = TO_UINT32(array.length); |  | 
| 1190 |  | 
| 1191   if (!IS_SPEC_FUNCTION(f)) throw MakeTypeError(kCalledNonCallable, f); | 1185   if (!IS_SPEC_FUNCTION(f)) throw MakeTypeError(kCalledNonCallable, f); | 
| 1192   var needs_wrapper = false; | 1186   var needs_wrapper = false; | 
| 1193   if (IS_NULL(receiver)) { | 1187   if (IS_NULL(receiver)) { | 
| 1194     if (%IsSloppyModeFunction(f)) receiver = UNDEFINED; | 1188     if (%IsSloppyModeFunction(f)) receiver = UNDEFINED; | 
| 1195   } else if (!IS_UNDEFINED(receiver)) { | 1189   } else if (!IS_UNDEFINED(receiver)) { | 
| 1196     needs_wrapper = SHOULD_CREATE_WRAPPER(f, receiver); | 1190     needs_wrapper = SHOULD_CREATE_WRAPPER(f, receiver); | 
| 1197   } | 1191   } | 
| 1198 | 1192 | 
| 1199   var is_array = IS_ARRAY(array); | 1193   var is_array = IS_ARRAY(array); | 
| 1200   var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f); | 1194   var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f); | 
| 1201   for (var i = 0; i < length; i++) { | 1195   for (var i = 0; i < length; i++) { | 
| 1202     if (HAS_INDEX(array, i, is_array)) { | 1196     if (HAS_INDEX(array, i, is_array)) { | 
| 1203       var element = array[i]; | 1197       var element = array[i]; | 
| 1204       // Prepare break slots for debugger step in. | 1198       // Prepare break slots for debugger step in. | 
| 1205       if (stepping) %DebugPrepareStepInIfStepping(f); | 1199       if (stepping) %DebugPrepareStepInIfStepping(f); | 
| 1206       var new_receiver = needs_wrapper ? $toObject(receiver) : receiver; | 1200       var new_receiver = needs_wrapper ? $toObject(receiver) : receiver; | 
| 1207       %_CallFunction(new_receiver, element, i, array, f); | 1201       %_CallFunction(new_receiver, element, i, array, f); | 
| 1208     } | 1202     } | 
| 1209   } | 1203   } | 
| 1210 } | 1204 } | 
| 1211 | 1205 | 
|  | 1206 function ArrayForEach(f, receiver) { | 
|  | 1207   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.forEach"); | 
|  | 1208 | 
|  | 1209   // Pull out the length so that modifications to the length in the | 
|  | 1210   // loop will not affect the looping and side effects are visible. | 
|  | 1211   var array = $toObject(this); | 
|  | 1212   var length = TO_UINT32(array.length); | 
|  | 1213   InnerArrayForEach(f, receiver, array, length); | 
|  | 1214 } | 
|  | 1215 | 
| 1212 | 1216 | 
| 1213 // Executes the function once for each element present in the | 1217 // Executes the function once for each element present in the | 
| 1214 // array until it finds one where callback returns true. | 1218 // array until it finds one where callback returns true. | 
| 1215 function ArraySome(f, receiver) { | 1219 function ArraySome(f, receiver) { | 
| 1216   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.some"); | 1220   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.some"); | 
| 1217 | 1221 | 
| 1218   // Pull out the length so that modifications to the length in the | 1222   // Pull out the length so that modifications to the length in the | 
| 1219   // loop will not affect the looping and side effects are visible. | 1223   // loop will not affect the looping and side effects are visible. | 
| 1220   var array = $toObject(this); | 1224   var array = $toObject(this); | 
| 1221   var length = TO_UINT32(array.length); | 1225   var length = TO_UINT32(array.length); | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 1236       // Prepare break slots for debugger step in. | 1240       // Prepare break slots for debugger step in. | 
| 1237       if (stepping) %DebugPrepareStepInIfStepping(f); | 1241       if (stepping) %DebugPrepareStepInIfStepping(f); | 
| 1238       var new_receiver = needs_wrapper ? $toObject(receiver) : receiver; | 1242       var new_receiver = needs_wrapper ? $toObject(receiver) : receiver; | 
| 1239       if (%_CallFunction(new_receiver, element, i, array, f)) return true; | 1243       if (%_CallFunction(new_receiver, element, i, array, f)) return true; | 
| 1240     } | 1244     } | 
| 1241   } | 1245   } | 
| 1242   return false; | 1246   return false; | 
| 1243 } | 1247 } | 
| 1244 | 1248 | 
| 1245 | 1249 | 
| 1246 function ArrayEvery(f, receiver) { | 1250 function InnerArrayEvery(f, receiver, array, length) { | 
| 1247   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.every"); |  | 
| 1248 |  | 
| 1249   // Pull out the length so that modifications to the length in the |  | 
| 1250   // loop will not affect the looping and side effects are visible. |  | 
| 1251   var array = $toObject(this); |  | 
| 1252   var length = TO_UINT32(array.length); |  | 
| 1253 |  | 
| 1254   if (!IS_SPEC_FUNCTION(f)) throw MakeTypeError(kCalledNonCallable, f); | 1251   if (!IS_SPEC_FUNCTION(f)) throw MakeTypeError(kCalledNonCallable, f); | 
| 1255   var needs_wrapper = false; | 1252   var needs_wrapper = false; | 
| 1256   if (IS_NULL(receiver)) { | 1253   if (IS_NULL(receiver)) { | 
| 1257     if (%IsSloppyModeFunction(f)) receiver = UNDEFINED; | 1254     if (%IsSloppyModeFunction(f)) receiver = UNDEFINED; | 
| 1258   } else if (!IS_UNDEFINED(receiver)) { | 1255   } else if (!IS_UNDEFINED(receiver)) { | 
| 1259     needs_wrapper = SHOULD_CREATE_WRAPPER(f, receiver); | 1256     needs_wrapper = SHOULD_CREATE_WRAPPER(f, receiver); | 
| 1260   } | 1257   } | 
| 1261 | 1258 | 
| 1262   var is_array = IS_ARRAY(array); | 1259   var is_array = IS_ARRAY(array); | 
| 1263   var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f); | 1260   var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f); | 
| 1264   for (var i = 0; i < length; i++) { | 1261   for (var i = 0; i < length; i++) { | 
| 1265     if (HAS_INDEX(array, i, is_array)) { | 1262     if (HAS_INDEX(array, i, is_array)) { | 
| 1266       var element = array[i]; | 1263       var element = array[i]; | 
| 1267       // Prepare break slots for debugger step in. | 1264       // Prepare break slots for debugger step in. | 
| 1268       if (stepping) %DebugPrepareStepInIfStepping(f); | 1265       if (stepping) %DebugPrepareStepInIfStepping(f); | 
| 1269       var new_receiver = needs_wrapper ? $toObject(receiver) : receiver; | 1266       var new_receiver = needs_wrapper ? $toObject(receiver) : receiver; | 
| 1270       if (!%_CallFunction(new_receiver, element, i, array, f)) return false; | 1267       if (!%_CallFunction(new_receiver, element, i, array, f)) return false; | 
| 1271     } | 1268     } | 
| 1272   } | 1269   } | 
| 1273   return true; | 1270   return true; | 
| 1274 } | 1271 } | 
| 1275 | 1272 | 
|  | 1273 function ArrayEvery(f, receiver) { | 
|  | 1274   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.every"); | 
|  | 1275 | 
|  | 1276   // Pull out the length so that modifications to the length in the | 
|  | 1277   // loop will not affect the looping and side effects are visible. | 
|  | 1278   var array = $toObject(this); | 
|  | 1279   var length = TO_UINT32(array.length); | 
|  | 1280   return InnerArrayEvery(f, receiver, array, length); | 
|  | 1281 } | 
|  | 1282 | 
| 1276 | 1283 | 
| 1277 function ArrayMap(f, receiver) { | 1284 function ArrayMap(f, receiver) { | 
| 1278   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.map"); | 1285   CHECK_OBJECT_COERCIBLE(this, "Array.prototype.map"); | 
| 1279 | 1286 | 
| 1280   // Pull out the length so that modifications to the length in the | 1287   // Pull out the length so that modifications to the length in the | 
| 1281   // loop will not affect the looping and side effects are visible. | 1288   // loop will not affect the looping and side effects are visible. | 
| 1282   var array = $toObject(this); | 1289   var array = $toObject(this); | 
| 1283   var length = TO_UINT32(array.length); | 1290   var length = TO_UINT32(array.length); | 
| 1284 | 1291 | 
| 1285   if (!IS_SPEC_FUNCTION(f)) throw MakeTypeError(kCalledNonCallable, f); | 1292   if (!IS_SPEC_FUNCTION(f)) throw MakeTypeError(kCalledNonCallable, f); | 
| (...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1588 | 1595 | 
| 1589 $arrayConcat = ArrayConcatJS; | 1596 $arrayConcat = ArrayConcatJS; | 
| 1590 $arrayJoin = ArrayJoin; | 1597 $arrayJoin = ArrayJoin; | 
| 1591 $arrayPush = ArrayPush; | 1598 $arrayPush = ArrayPush; | 
| 1592 $arrayPop = ArrayPop; | 1599 $arrayPop = ArrayPop; | 
| 1593 $arrayShift = ArrayShift; | 1600 $arrayShift = ArrayShift; | 
| 1594 $arraySlice = ArraySlice; | 1601 $arraySlice = ArraySlice; | 
| 1595 $arraySplice = ArraySplice; | 1602 $arraySplice = ArraySplice; | 
| 1596 $arrayUnshift = ArrayUnshift; | 1603 $arrayUnshift = ArrayUnshift; | 
| 1597 | 1604 | 
| 1598 }) | 1605 $innerArrayForEach = InnerArrayForEach; | 
|  | 1606 $innerArrayEvery = InnerArrayEvery; | 
|  | 1607 | 
|  | 1608 }); | 
| OLD | NEW | 
|---|