ecma_bigint_get_bigint (ecma_value_t value, /**< any value */
                        bool *free_result_p) /**< [out] result should be freed */
{
  *free_result_p = false;

  if (ecma_is_value_bigint (value))
  {
    return value;
  }

  if (ecma_is_value_object (value))
  {
    ecma_object_t *object_p = ecma_get_object_from_value (value);
    ecma_value_t default_value = ecma_op_object_default_value (object_p, ECMA_PREFERRED_TYPE_NUMBER);

    if (ECMA_IS_VALUE_ERROR (default_value))
    {
      return default_value;
    }

    if (ecma_is_value_bigint (default_value))
    {
      *free_result_p = (default_value != ECMA_BIGINT_ZERO);
      return default_value;
    }

    ecma_free_value (default_value);
  }

  return ecma_raise_type_error (ECMA_ERR_MSG ("Cannot convert a BigInt value to a number"));
} /* ecma_bigint_get_bigint */
ecma_bigint_get_bigint (ecma_value_t value,  
                        bool *free_result_p)  
{
  *free_result_p = false;

  if (ecma_is_value_bigint (value))
  {
    return value;
  }

  if (ecma_is_value_object (value))
  {
    ecma_object_t *object_p = ecma_get_object_from_value (value);
    ecma_value_t default_value = ecma_op_object_default_value (object_p, ECMA_PREFERRED_TYPE_NUMBER);

    if (ECMA_IS_VALUE_ERROR (default_value))
    {
      return default_value;
    }

    if (ecma_is_value_bigint (default_value))
    {
      *free_result_p = (default_value != ECMA_BIGINT_ZERO);
      return default_value;
    }

    ecma_free_value (default_value);
  }

  return ecma_raise_type_error (ECMA_ERR_MSG ("Cannot convert a BigInt value to a number"));
}  