Repository: jerryscript-project/jerryscript
File: jerry-core/ecma/builtin-objects/ecma-builtin-array.c (C)

Code before:
ecma_value_t
ecma_builtin_array_dispatch_call (const ecma_value_t *arguments_list_p, /**< arguments list */
                                  ecma_length_t arguments_list_len) /**< number of arguments */
{
  JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL);

  return ecma_builtin_array_dispatch_construct (arguments_list_p, arguments_list_len);
} /* ecma_builtin_array_dispatch_call */

/**
 * Handle calling [[Construct]] of built-in Array object
 *
 * @return ecma value
 */
ecma_value_t
ecma_builtin_array_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
                                       ecma_length_t arguments_list_len) /**< number of arguments */
{
  JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL);

  ecma_value_t result = ecma_op_create_array_object (arguments_list_p, arguments_list_len, true);

  if (ECMA_IS_VALUE_ERROR (result))
  {
    return result;
  }
#if ENABLED (JERRY_ES2015)
  if (JERRY_CONTEXT (current_new_target) != NULL)
  {
    ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
                                                                     ECMA_BUILTIN_ID_ARRAY_PROTOTYPE);
    if (proto_p == NULL)
    {
      ecma_free_value (result);
      return ECMA_VALUE_ERROR;
    }

    ecma_object_t *object_p = ecma_get_object_from_value (result);
    ECMA_SET_POINTER (object_p->u2.prototype_cp, proto_p);
    ecma_deref_object (proto_p);
  }
#endif /* ENABLED (JERRY_ES2015) */
  return result;
} /* ecma_builtin_array_dispatch_construct */

/**
 * @}
 * @}
 * @}
 */


Review comment (suggestion):
In `ecma_builtin_array_dispatch_call` return directly with the result of the `ecma_op_create_array_object `, so this check is not needed.

Code after:
ecma_value_t
ecma_builtin_array_dispatch_call (const ecma_value_t *arguments_list_p, /**< arguments list */
                                  ecma_length_t arguments_list_len) /**< number of arguments */
{
  JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL);

  return ecma_op_create_array_object (arguments_list_p, arguments_list_len, true);
} /* ecma_builtin_array_dispatch_call */

/**
 * Handle calling [[Construct]] of built-in Array object
 *
 * @return ecma value
 */
ecma_value_t
ecma_builtin_array_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */
                                       ecma_length_t arguments_list_len) /**< number of arguments */
{
  JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL);

#if !ENABLED (JERRY_ES2015)
  return ecma_op_create_array_object (arguments_list_p, arguments_list_len, true);
#else /* ENABLED (JERRY_ES2015) */
  ecma_object_t *proto_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target),
                                                                   ECMA_BUILTIN_ID_ARRAY_PROTOTYPE);

  if (proto_p == NULL)
  {
    return ECMA_VALUE_ERROR;
  }

  ecma_value_t result = ecma_op_create_array_object (arguments_list_p, arguments_list_len, true);

  if (ECMA_IS_VALUE_ERROR (result))
  {
    ecma_deref_object (proto_p);
    return ECMA_VALUE_ERROR;
  }

  ecma_object_t *object_p = ecma_get_object_from_value (result);
  ECMA_SET_NON_NULL_POINTER (object_p->u2.prototype_cp, proto_p);
  ecma_deref_object (proto_p);
  return result;
#endif /* ENABLED (JERRY_ES2015) */
} /* ecma_builtin_array_dispatch_construct */

/**
 * @}
 * @}
 * @}
 */