@@ -1281,10 +1281,9 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
1281
1281
ecma_number_t *num_p = ecma_alloc_number ();
1282
1282
ecma_object_t *func_object_p;
1283
1283
1284
- ecma_completion_value_t to_object_comp = ecma_op_to_object (arg1);
1285
- JERRY_ASSERT (ecma_is_completion_value_normal (to_object_comp));
1286
- func_object_p = ecma_get_object_from_completion_value (to_object_comp);
1287
- ecma_completion_value_t accumulator = ecma_make_empty_completion_value ();
1284
+ JERRY_ASSERT (ecma_is_value_object (arg1));
1285
+ func_object_p = ecma_get_object_from_value (arg1);
1286
+ ecma_value_t accumulator = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
1288
1287
1289
1288
/* 5 */
1290
1289
if (len_number == ECMA_NUMBER_ZERO && ecma_is_value_undefined (arg2))
@@ -1299,23 +1298,23 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
1299
1298
/* 7a */
1300
1299
if (!ecma_is_value_undefined (arg2))
1301
1300
{
1302
- accumulator = ecma_copy_completion_value (arg2);
1301
+ accumulator = ecma_copy_value (arg2, true );
1303
1302
}
1304
1303
else
1305
1304
{
1306
1305
/* 8a */
1307
- bool kPresent = false ;
1306
+ bool k_present = false ;
1308
1307
/* 8b */
1309
- while (!kPresent && index < len && ecma_is_completion_value_empty (ret_value))
1308
+ while (!k_present && index < len && ecma_is_completion_value_empty (ret_value))
1310
1309
{
1311
1310
/* 8b-i */
1312
1311
ecma_string_t *index_str_p = ecma_new_ecma_string_from_uint32 (index);
1313
1312
1314
1313
/* 8b-ii-iii */
1315
- if ((kPresent = (ecma_op_object_get_property (obj_p, index_str_p) != NULL )))
1314
+ if ((k_present = (ecma_op_object_get_property (obj_p, index_str_p) != NULL )))
1316
1315
{
1317
1316
ECMA_TRY_CATCH (current_value, ecma_op_object_get (obj_p, index_str_p), ret_value);
1318
- accumulator = ecma_copy_completion_value (current_value);
1317
+ accumulator = ecma_copy_value (current_value, true );
1319
1318
ECMA_FINALIZE (current_value);
1320
1319
}
1321
1320
/* 8b-iv */
@@ -1324,13 +1323,12 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
1324
1323
ecma_deref_ecma_string (index_str_p);
1325
1324
}
1326
1325
/* 8c */
1327
- if (!kPresent )
1326
+ if (!k_present )
1328
1327
{
1329
1328
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
1330
1329
}
1331
1330
}
1332
1331
/* 9 */
1333
- ecma_value_t undefined_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
1334
1332
ecma_value_t current_index;
1335
1333
1336
1334
for (; index < len && ecma_is_completion_value_empty (ret_value); ++index)
@@ -1345,15 +1343,17 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
1345
1343
/* 9c-ii */
1346
1344
*num_p = ecma_uint32_to_number (index);
1347
1345
current_index = ecma_make_number_value (num_p);
1348
- ecma_value_t prev_value = ecma_get_completion_value_value (accumulator);
1349
- ecma_value_t call_args[] = {prev_value, current_value, current_index, obj_this};
1346
+ ecma_value_t call_args[] = {accumulator, current_value, current_index, obj_this};
1350
1347
1351
1348
ECMA_TRY_CATCH (call_value,
1352
- ecma_op_function_call (func_object_p, undefined_value, call_args, 4 ),
1349
+ ecma_op_function_call (func_object_p,
1350
+ ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED),
1351
+ call_args,
1352
+ 4 ),
1353
1353
ret_value);
1354
1354
1355
- ecma_free_completion_value (accumulator);
1356
- accumulator = ecma_copy_completion_value (call_value);
1355
+ ecma_free_value (accumulator, true );
1356
+ accumulator = ecma_copy_value (call_value, true );
1357
1357
1358
1358
ECMA_FINALIZE (call_value);
1359
1359
ECMA_FINALIZE (current_value);
@@ -1364,14 +1364,12 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
1364
1364
1365
1365
if (ecma_is_completion_value_empty (ret_value))
1366
1366
{
1367
- ret_value = ecma_copy_completion_value ( accumulator);
1367
+ ret_value = ecma_make_normal_completion_value ( ecma_copy_value ( accumulator, true ) );
1368
1368
}
1369
1369
1370
- ecma_free_value (undefined_value, false );
1371
1370
}
1372
1371
1373
- ecma_free_completion_value (accumulator);
1374
- ecma_free_completion_value (to_object_comp);
1372
+ ecma_free_value (accumulator, true );
1375
1373
ecma_dealloc_number (num_p);
1376
1374
}
1377
1375
0 commit comments