@@ -2546,10 +2546,12 @@ ecma_builtin_array_prototype_object_filter (ecma_value_t this_arg, /**< this arg
25462546 */
25472547static ecma_completion_value_t
25482548ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /* *< this argument */
2549- ecma_value_t arg1 , /* *< callbackfn */
2550- ecma_value_t arg2 ) /* *< initialValue */
2549+ const ecma_value_t args[] , /* *< arguments list */
2550+ ecma_length_t args_number ) /* *< number of arguments */
25512551{
25522552 ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
2553+ ecma_value_t callbackfn = (args_number > 0 ) ? args[0 ] : ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
2554+ ecma_value_t initial_value = (args_number > 1 ) ? args[1 ] : ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
25532555
25542556 /* 1. */
25552557 ECMA_TRY_CATCH (obj_this,
@@ -2570,7 +2572,7 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
25702572 uint32_t len = ecma_number_to_uint32 (len_number);
25712573
25722574 /* 4. */
2573- if (!ecma_op_is_callable (arg1 ))
2575+ if (!ecma_op_is_callable (callbackfn ))
25742576 {
25752577 ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
25762578 }
@@ -2579,12 +2581,12 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
25792581 ecma_number_t *num_p = ecma_alloc_number ();
25802582 ecma_object_t *func_object_p;
25812583
2582- JERRY_ASSERT (ecma_is_value_object (arg1 ));
2583- func_object_p = ecma_get_object_from_value (arg1 );
2584+ JERRY_ASSERT (ecma_is_value_object (callbackfn ));
2585+ func_object_p = ecma_get_object_from_value (callbackfn );
25842586 ecma_value_t accumulator = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
25852587
25862588 /* 5. */
2587- if (len_number == ECMA_NUMBER_ZERO && ecma_is_value_undefined (arg2 ))
2589+ if (len_number == ECMA_NUMBER_ZERO && ecma_is_value_undefined (initial_value ))
25882590 {
25892591 ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
25902592 }
@@ -2594,9 +2596,9 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
25942596 uint32_t index = 0 ;
25952597
25962598 /* 7.a */
2597- if (! ecma_is_value_undefined (arg2) )
2599+ if (args_number > 1 )
25982600 {
2599- accumulator = ecma_copy_value (arg2 , true );
2601+ accumulator = ecma_copy_value (initial_value , true );
26002602 }
26012603 else
26022604 {
@@ -2689,10 +2691,12 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
26892691 */
26902692static ecma_completion_value_t
26912693ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /* *< this argument */
2692- ecma_value_t arg1 , /* *< callbackfn */
2693- ecma_value_t arg2 ) /* *< initialValue */
2694+ const ecma_value_t args[] , /* *< arguments list */
2695+ ecma_length_t args_number ) /* *< number of arguments */
26942696{
26952697 ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
2698+ ecma_value_t callbackfn = (args_number > 0 ) ? args[0 ] : ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
2699+ ecma_value_t initial_value = (args_number > 1 ) ? args[1 ] : ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
26962700
26972701 /* 1. */
26982702 ECMA_TRY_CATCH (obj_this,
@@ -2713,19 +2717,19 @@ ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /**< th
27132717 uint32_t len = ecma_number_to_uint32 (len_number);
27142718
27152719 /* 4. */
2716- if (!ecma_op_is_callable (arg1 ))
2720+ if (!ecma_op_is_callable (callbackfn ))
27172721 {
27182722 ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
27192723 }
27202724 else
27212725 {
27222726 ecma_object_t *func_object_p;
27232727
2724- JERRY_ASSERT (ecma_is_value_object (arg1 ));
2725- func_object_p = ecma_get_object_from_value (arg1 );
2728+ JERRY_ASSERT (ecma_is_value_object (callbackfn ));
2729+ func_object_p = ecma_get_object_from_value (callbackfn );
27262730
27272731 /* 5. */
2728- if (len_number == ECMA_NUMBER_ZERO && ecma_is_value_undefined (arg2 ))
2732+ if (len_number == ECMA_NUMBER_ZERO && ecma_is_value_undefined (initial_value ))
27292733 {
27302734 ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
27312735 }
@@ -2738,9 +2742,9 @@ ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /**< th
27382742 int64_t index = (int64_t ) len - 1 ;
27392743
27402744 /* 7.a */
2741- if (! ecma_is_value_undefined (arg2) )
2745+ if (args_number > 1 )
27422746 {
2743- accumulator = ecma_copy_value (arg2 , true );
2747+ accumulator = ecma_copy_value (initial_value , true );
27442748 }
27452749 else
27462750 {
0 commit comments