Skip to content

Commit ac9fce1

Browse files
Istvan Mikloszherczeg
authored andcommitted
Merge jerry_get_value_without_error and jerry_value_clear_error_flag functions (#2350)
JerryScript-DCO-1.0-Signed-off-by: Istvan Miklos [email protected]
1 parent 4779451 commit ac9fce1

File tree

13 files changed

+91
-99
lines changed

13 files changed

+91
-99
lines changed

docs/02.API-REFERENCE.md

Lines changed: 42 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,41 +1710,71 @@ jerry_get_error_type (const jerry_value_t value);
17101710
- [jerry_create_error](#jerry_create_error)
17111711
- [jerry_value_is_error](#jerry_value_is_error)
17121712

1713-
## jerry_value_clear_error_flag
1713+
## jerry_get_value_from_error
17141714

17151715
**Summary**
17161716

1717-
Clear both the error and abort flags.
1717+
Get the value from an error.
1718+
1719+
Many API functions cannot be called with an error value.
1720+
This function extracts the API value from an error. The second argument defines
1721+
whether the input error value must be released or not. If it is set to `true`,
1722+
then a [`jerry_release_value`](#jerry_release_value) function will be called
1723+
for the first argument, so the error value won't be available after the call of
1724+
`jerry_get_value_from_error`. The second argument should be false if both error
1725+
and its represented value are needed. The first argument is returned unchanged if it is not an error.
1726+
1727+
*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
1728+
is no longer needed.
17181729

17191730
**Prototype**
17201731

17211732
```c
1722-
void
1723-
jerry_value_clear_error_flag (jerry_value_t *value_p);
1733+
jerry_value_t
1734+
jerry_get_value_from_error (jerry_value_t value, bool release)
17241735
```
17251736

1726-
- `value_p` - pointer to an api value
1737+
- `value` - error (api) value
1738+
- `release` - raw boolean, defines whether input value must be released
1739+
- return value - api value
17271740

1728-
**Example**
1741+
**Example 1**
17291742

17301743
```c
17311744
{
1732-
jerry_value_t value;
1745+
jerry_value_t error;
17331746
... // create or acquire value
17341747

1735-
jerry_value_clear_error_flag (&value);
1748+
jerry_value_set_error_flag (&error);
1749+
jerry_value_t value = jerry_get_value_from_error (error, true);
1750+
// using the 'error' variable after release is invalid.
17361751

17371752
jerry_release_value (value);
17381753
}
17391754
```
17401755

1756+
**Example 2**
1757+
1758+
```c
1759+
{
1760+
jerry_value_t error;
1761+
... // create or acquire value
1762+
1763+
jerry_value_set_error_flag (&error);
1764+
jerry_value_t value = jerry_get_value_from_error (error, false);
1765+
// both 'error' and 'value' can be used and must be released when they are no longer needed
1766+
1767+
jerry_release_value (value);
1768+
jerry_release_value (error);
1769+
}
1770+
```
1771+
17411772
**See also**
17421773

17431774
- [jerry_value_t](#jerry_value_t)
17441775
- [jerry_value_set_error_flag](#jerry_value_set_error_flag)
17451776
- [jerry_value_set_abort_flag](#jerry_value_set_abort_flag)
17461777

1747-
17481778
## jerry_value_set_error_flag
17491779

17501780
**Summary**
@@ -1776,7 +1806,7 @@ jerry_value_set_error_flag (jerry_value_t *value_p);
17761806
**See also**
17771807

17781808
- [jerry_value_t](#jerry_value_t)
1779-
- [jerry_value_clear_error_flag](#jerry_value_clear_error_flag)
1809+
- [jerry_get_value_from_error](#jerry_get_value_from_error)
17801810
- [jerry_value_set_abort_flag](#jerry_value_set_abort_flag)
17811811

17821812

@@ -1811,53 +1841,10 @@ jerry_value_set_abort_flag (jerry_value_t *value_p);
18111841
**See also**
18121842

18131843
- [jerry_value_t](#jerry_value_t)
1814-
- [jerry_value_clear_error_flag](#jerry_value_clear_error_flag)
1844+
- [jerry_get_value_from_error](#jerry_get_value_from_error)
18151845
- [jerry_value_set_error_flag](#jerry_value_set_error_flag)
18161846

18171847

1818-
## jerry_get_value_without_error_flag
1819-
1820-
**Summary**
1821-
1822-
If the input value is an error value, then return a new reference to its referenced value.
1823-
Otherwise, return a new reference to the value itself.
1824-
1825-
*Note*: Returned value must be freed with [jerry_release_value](#jerry_release_value)
1826-
when it is no longer needed.
1827-
1828-
**Prototype**
1829-
1830-
```c
1831-
jerry_value_t
1832-
jerry_get_value_without_error_flag (jerry_value_t value)
1833-
```
1834-
1835-
- `value` - api value
1836-
1837-
**Example**
1838-
1839-
```c
1840-
{
1841-
jerry_value_t value;
1842-
... // create or acquire value
1843-
1844-
jerry_value_set_error_flag (&value);
1845-
1846-
jerry_value_t real_value = jerry_get_value_without_error_flag (value);
1847-
... // process the real_value. Different from `jerry_value_clear_error_flag`,
1848-
// the error `value` will not be automatically released after calling
1849-
// `jerry_get_value_without_error_flag`.
1850-
1851-
jerry_release_value (value);
1852-
jerry_release_value (real_value);
1853-
}
1854-
```
1855-
1856-
**See also**
1857-
1858-
- [jerry_acquire_value](#jerry_acquire_value)
1859-
- [jerry_value_clear_error_flag](#jerry_value_clear_error_flag)
1860-
18611848
# Getter functions of 'jerry_value_t'
18621849

18631850
Get raw data from API values.
@@ -2892,7 +2879,7 @@ jerry_create_error (jerry_error_t error_type,
28922879
**See also**
28932880

28942881
- [jerry_value_is_error](#jerry_value_is_error)
2895-
- [jerry_value_clear_error_flag](#jerry_value_clear_error_flag)
2882+
- [jerry_get_value_from_error](#jerry_get_value_from_error)
28962883
- [jerry_value_set_error_flag](#jerry_value_set_error_flag)
28972884

28982885

jerry-core/api/jerry.c

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -903,18 +903,35 @@ jerry_is_feature_enabled (const jerry_feature_t feature) /**< feature to check *
903903
} /* jerry_is_feature_enabled */
904904

905905
/**
906-
* Clear the error flag
906+
* Get the value from an error value.
907+
*
908+
* Extract the api value from an error. If the second argument is true
909+
* it will release the input error value.
910+
*
911+
* Note:
912+
* returned value must be freed with jerry_release_value, when it is no longer needed.
913+
*
914+
* @return jerry_value_t value
907915
*/
908-
void
909-
jerry_value_clear_error_flag (jerry_value_t *value_p) /**< api value */
916+
jerry_value_t
917+
jerry_get_value_from_error (jerry_value_t value, /**< api value */
918+
bool release) /**< release api value */
910919
{
911920
jerry_assert_api_available ();
912921

913-
if (ecma_is_value_error_reference (*value_p))
922+
if (!ecma_is_value_error_reference (value))
914923
{
915-
*value_p = ecma_clear_error_reference (*value_p, false);
924+
return value;
925+
}
926+
927+
jerry_value_t ret_val = jerry_acquire_value (ecma_get_error_reference_from_value (value)->value);
928+
929+
if (release)
930+
{
931+
jerry_release_value (value);
916932
}
917-
} /* jerry_value_clear_error_flag */
933+
return ret_val;
934+
} /* jerry_get_value_from_error */
918935

919936
/**
920937
* Set the error flag if the value is not an error reference.
@@ -932,8 +949,7 @@ jerry_value_set_error_flag (jerry_value_t *value_p) /**< api value */
932949
{
933950
return;
934951
}
935-
936-
jerry_value_clear_error_flag (value_p);
952+
*value_p = ecma_clear_error_reference (*value_p, false);
937953
}
938954

939955
*value_p = ecma_create_error_reference (*value_p, true);
@@ -955,27 +971,12 @@ jerry_value_set_abort_flag (jerry_value_t *value_p) /**< api value */
955971
{
956972
return;
957973
}
958-
959-
jerry_value_clear_error_flag (value_p);
974+
*value_p = ecma_clear_error_reference (*value_p, false);
960975
}
961976

962977
*value_p = ecma_create_error_reference (*value_p, false);
963978
} /* jerry_value_set_abort_flag */
964979

965-
/**
966-
* If the input value is an error value, then return a new reference to its referenced value.
967-
* Otherwise, return a new reference to the value itself.
968-
*
969-
* Note:
970-
* returned value must be freed with jerry_release_value, when it is no longer needed.
971-
*
972-
* @return the real value of the jerry_value
973-
*/
974-
jerry_value_t jerry_get_value_without_error_flag (jerry_value_t value) /**< api value */
975-
{
976-
return jerry_acquire_value (jerry_get_arg_value (value));
977-
} /* jerry_get_value_without_error_flag */
978-
979980
/**
980981
* Return the type of the Error object if possible.
981982
*

jerry-core/include/jerryscript-core.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,9 @@ bool jerry_is_feature_enabled (const jerry_feature_t feature);
368368
/**
369369
* Error manipulation functions.
370370
*/
371-
void jerry_value_clear_error_flag (jerry_value_t *value_p);
371+
jerry_value_t jerry_get_value_from_error (jerry_value_t value, bool release);
372372
void jerry_value_set_error_flag (jerry_value_t *value_p);
373373
void jerry_value_set_abort_flag (jerry_value_t *value_p);
374-
jerry_value_t jerry_get_value_without_error_flag (jerry_value_t value);
375374

376375
/**
377376
* Error object function(s).

jerry-main/main-unix-snapshot.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ process_generate (cli_state_t *cli_state_p, /**< cli state */
320320
{
321321
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Error: Generating snapshot failed!\n");
322322

323-
jerry_value_clear_error_flag (&snapshot_result);
323+
snapshot_result = jerry_get_value_from_error (snapshot_result, true);
324324

325325
print_unhandled_exception (snapshot_result);
326326

jerry-main/main-unix.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ register_js_function (const char *name_p, /**< name of the function */
265265
if (jerry_value_is_error (result_val))
266266
{
267267
jerry_port_log (JERRY_LOG_LEVEL_WARNING, "Warning: failed to register '%s' method.", name_p);
268-
jerry_value_clear_error_flag (&result_val);
268+
result_val = jerry_get_value_from_error (result_val, true);
269269
print_unhandled_exception (result_val);
270270
}
271271

@@ -772,13 +772,13 @@ main (int argc,
772772

773773
if (jerry_value_is_error (ret_val_eval))
774774
{
775-
jerry_value_clear_error_flag (&ret_val_eval);
775+
ret_val_eval = jerry_get_value_from_error (ret_val_eval, true);
776776
print_unhandled_exception (ret_val_eval);
777777
}
778778
}
779779
else
780780
{
781-
jerry_value_clear_error_flag (&ret_val_eval);
781+
ret_val_eval = jerry_get_value_from_error (ret_val_eval, true);
782782
print_unhandled_exception (ret_val_eval);
783783
}
784784

@@ -791,7 +791,7 @@ main (int argc,
791791

792792
if (jerry_value_is_error (ret_value))
793793
{
794-
jerry_value_clear_error_flag (&ret_value);
794+
ret_value = jerry_get_value_from_error (ret_value, true);
795795
print_unhandled_exception (ret_value);
796796

797797
ret_code = JERRY_STANDALONE_EXIT_CODE_FAIL;
@@ -803,7 +803,7 @@ main (int argc,
803803

804804
if (jerry_value_is_error (ret_value))
805805
{
806-
jerry_value_clear_error_flag (&ret_value);
806+
ret_value = jerry_get_value_from_error (ret_value, true);
807807
print_unhandled_exception (ret_value);
808808
ret_code = JERRY_STANDALONE_EXIT_CODE_FAIL;
809809
}

targets/curie_bsp/jerry_app/quark/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ void jerry_resolve_error (jerry_value_t ret_value)
4646
{
4747
if (jerry_value_is_error (ret_value))
4848
{
49-
jerry_value_clear_error_flag (&ret_value);
49+
ret_value = jerry_get_value_from_error (ret_value, true);
5050
jerry_value_t err_str_val = jerry_value_to_string (ret_value);
5151
jerry_size_t err_str_size = jerry_get_string_size (err_str_val);
5252
jerry_char_t *err_str_buf = (jerry_char_t *) balloc (err_str_size, NULL);

targets/nuttx-stm32f4/jerry_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ print_unhandled_exception (jerry_value_t error_value, /**< error value */
152152
{
153153
assert (jerry_value_is_error (error_value));
154154

155-
error_value = jerry_get_value_without_error_flag (error_value);
155+
error_value = jerry_get_value_from_error (error_value, false);
156156
jerry_value_t err_str_val = jerry_value_to_string (error_value);
157157
jerry_size_t err_str_size = jerry_get_string_size (err_str_val);
158158
jerry_char_t err_str_buf[256];

targets/tizenrt-artik053/apps/jerryscript/jerry_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ print_unhandled_exception (jerry_value_t error_value, /**< error value */
130130
{
131131
assert (jerry_value_is_error (error_value));
132132

133-
error_value = jerry_get_value_without_error_flag (error_value);
133+
error_value = jerry_get_value_from_error (error_value, false);
134134
jerry_value_t err_str_val = jerry_value_to_string (error_value);
135135
jerry_size_t err_str_size = jerry_get_string_size (err_str_val);
136136
jerry_char_t err_str_buf[256];

targets/zephyr/src/main-zephyr.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ static int shell_cmd_handler (char *source_buffer)
6060
printf ("Error executing statement: ");
6161
/* Clear error flag, otherwise print call below won't produce any
6262
output. */
63-
jerry_value_clear_error_flag (&ret_val);
63+
ret_val = jerry_get_value_from_error (ret_val, true);
6464
}
6565

6666
if (!jerry_value_is_error (print_function))

tests/unit-core/test-api-errortype.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ main (void)
4040
TEST_ASSERT (jerry_value_is_error (error_obj));
4141
TEST_ASSERT (jerry_get_error_type (error_obj) == errors[idx]);
4242

43-
jerry_value_clear_error_flag (&error_obj);
43+
error_obj = jerry_get_value_from_error (error_obj, true);
4444

4545
TEST_ASSERT (jerry_get_error_type (error_obj) == errors[idx]);
4646

0 commit comments

Comments
 (0)