| 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 |