Replace the jerry_value_set_error_flag function with jerry_create_error_from_value (#2367)

JerryScript-DCO-1.0-Signed-off-by: Istvan Miklos imiklos2@inf.u-szeged.hu
This commit is contained in:
Istvan Miklos
2018-06-11 03:16:58 +02:00
committed by yichoi
parent be59d0a224
commit 2d0e37ff74
6 changed files with 83 additions and 33 deletions
+23 -9
View File
@@ -934,26 +934,40 @@ jerry_get_value_from_error (jerry_value_t value, /**< api value */
} /* jerry_get_value_from_error */
/**
* Set the error flag if the value is not an error reference.
* Create error from an api value.
*
* Create error value from an api value. If the second argument is true
* it will release the input api value.
*
* @return api error value
*/
void
jerry_value_set_error_flag (jerry_value_t *value_p) /**< api value */
jerry_value_t
jerry_create_error_from_value (jerry_value_t value, /**< api value */
bool release) /**< release api value */
{
jerry_assert_api_available ();
if (JERRY_UNLIKELY (ecma_is_value_error_reference (*value_p)))
if (JERRY_UNLIKELY (ecma_is_value_error_reference (value)))
{
/* This is a rare case so it is optimized for
* binary size rather than performance. */
if (!jerry_value_is_abort (*value_p))
if (!jerry_value_is_abort (value))
{
return;
return (release ? value : jerry_acquire_value (value));
}
*value_p = ecma_clear_error_reference (*value_p, false);
value = jerry_get_value_from_error (value, release);
release = true;
}
*value_p = ecma_create_error_reference (*value_p, true);
} /* jerry_value_set_error_flag */
jerry_value_t ret_val = ecma_create_error_reference (value, true);
if (release)
{
jerry_release_value (value);
}
return ret_val;
} /* jerry_create_error_from_value */
/**
* Set both the abort and error flags if the value is not an error reference.