Add api: jerry_get_value_without_error_flag (#2096)

It is used to get the reference value from a error value

JerryScript-DCO-1.0-Signed-off-by: Zidong Jiang zidong.jiang@intel.com
This commit is contained in:
Zidong Jiang
2017-12-13 12:46:20 +08:00
committed by GitHub
parent 458dc58b59
commit 11e0c13094
4 changed files with 73 additions and 0 deletions
+43
View File
@@ -1486,6 +1486,49 @@ jerry_value_set_error_flag (jerry_value_t *value_p);
- [jerry_value_t](#jerry_value_t) - [jerry_value_t](#jerry_value_t)
## jerry_get_value_without_error_flag
**Summary**
If the input value is an error value, then return a new reference to its referenced value.
Otherwise, return a new reference to the value itself.
*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value)
when it is no longer needed.
**Prototype**
```c
jerry_value_t
jerry_get_value_without_error_flag (jerry_value_t value)
```
- `value` - api value
**Example**
```c
{
jerry_value_t value;
... // create or acquire value
jerry_value_set_error_flag (&value);
jerry_value_t real_value = jerry_get_value_without_error_flag (value);
... // process the real_value. Different from `jerry_value_clear_error_flag`,
// the error `value` will not be automatically released after calling
// `jerry_get_value_without_error_flag`.
jerry_release_value (value);
jerry_release_value (real_value);
}
```
**See also**
- [jerry_acquire_value](#jerry_acquire_value)
- [jerry_value_clear_error_flag](#jerry_value_clear_error_flag)
# Getter functions of 'jerry_value_t' # Getter functions of 'jerry_value_t'
Get raw data from API values. Get raw data from API values.
+14
View File
@@ -849,6 +849,20 @@ jerry_value_set_error_flag (jerry_value_t *value_p)
} }
} /* jerry_value_set_error_flag */ } /* jerry_value_set_error_flag */
/**
* If the input value is an error value, then return a new reference to its referenced value.
* Otherwise, return a new reference to the value itself.
*
* Note:
* returned value must be freed with jerry_release_value, when it is no longer needed.
*
* @return the real value of the jerry_value
*/
jerry_value_t jerry_get_value_without_error_flag (jerry_value_t value) /**< api value */
{
return jerry_acquire_value (jerry_get_arg_value (value));
} /* jerry_get_value_without_error_flag */
/** /**
* Get boolean from the specified value. * Get boolean from the specified value.
* *
+1
View File
@@ -295,6 +295,7 @@ bool jerry_is_feature_enabled (const jerry_feature_t feature);
bool jerry_value_has_error_flag (const jerry_value_t value); bool jerry_value_has_error_flag (const jerry_value_t value);
void jerry_value_clear_error_flag (jerry_value_t *value_p); void jerry_value_clear_error_flag (jerry_value_t *value_p);
void jerry_value_set_error_flag (jerry_value_t *value_p); void jerry_value_set_error_flag (jerry_value_t *value_p);
jerry_value_t jerry_get_value_without_error_flag (jerry_value_t value);
/** /**
* Getter functions of 'jerry_value_t'. * Getter functions of 'jerry_value_t'.
+15
View File
@@ -1060,6 +1060,21 @@ main (void)
TEST_ASSERT (test_api_is_free_callback_was_called); TEST_ASSERT (test_api_is_free_callback_was_called);
/* Test: jerry_get_value_without_error_flag */
{
jerry_init (JERRY_INIT_EMPTY);
jerry_value_t num_val = jerry_create_number (123);
jerry_value_set_error_flag (&num_val);
TEST_ASSERT (jerry_value_has_error_flag (num_val));
jerry_value_t num2_val = jerry_get_value_without_error_flag (num_val);
TEST_ASSERT (!jerry_value_has_error_flag (num2_val));
double num = jerry_get_number_value (num2_val);
TEST_ASSERT (num == 123);
jerry_release_value (num_val);
jerry_release_value (num2_val);
jerry_cleanup ();
}
/* Test: parser error location */ /* Test: parser error location */
if (jerry_is_feature_enabled (JERRY_FEATURE_ERROR_MESSAGES)) if (jerry_is_feature_enabled (JERRY_FEATURE_ERROR_MESSAGES))
{ {