Skip to content

Commit 3ad813f

Browse files
author
Istvan Miklos
committed
Fix jerry_create_error_from_value
Fixed the release issue, added some test cases for the function JerryScript-DCO-1.0-Signed-off-by: Istvan Miklos imiklos2@inf.u-szeged.hu
1 parent 86ecc81 commit 3ad813f

File tree

2 files changed

+50
-6
lines changed

2 files changed

+50
-6
lines changed

jerry-core/api/jerry.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -954,20 +954,19 @@ jerry_create_error_from_value (jerry_value_t value, /**< api value */
954954
* binary size rather than performance. */
955955
if (!jerry_value_is_abort (value))
956956
{
957-
return (release ? value : jerry_acquire_value (value));
957+
return release ? value : jerry_acquire_value (value);
958958
}
959959

960960
value = jerry_get_value_from_error (value, release);
961961
release = true;
962962
}
963963

964-
jerry_value_t ret_val = ecma_create_error_reference (value, true);
965-
if (release)
964+
if (!release)
966965
{
967-
jerry_release_value (value);
966+
value = ecma_copy_value (value);
968967
}
969968

970-
return ret_val;
969+
return ecma_create_error_reference (value, true);
971970
} /* jerry_create_error_from_value */
972971

973972
/**

tests/unit-core/test-api-set-and-clear-error-flag.c

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,51 @@ main (void)
3131

3232
JERRY_ASSERT (obj_val != err_val);
3333
jerry_release_value (err_val);
34+
jerry_release_value (obj_val);
35+
36+
jerry_value_t str = jerry_create_string ((jerry_char_t *) "Pterodactylus");
37+
jerry_size_t str_size = jerry_get_utf8_string_size (str);
38+
jerry_char_t str_buff[str_size];
39+
jerry_string_to_utf8_char_buffer (str, str_buff, str_size);
40+
str_buff[str_size] = '\0';
41+
jerry_value_t error = jerry_create_error_from_value (str, true);
42+
str = jerry_get_value_from_error (error, true);
43+
str_size = jerry_get_string_size (str);
44+
jerry_char_t str_buff2[str_size];
45+
jerry_string_to_utf8_char_buffer (str, str_buff2, str_size);
46+
str_buff2[str_size] = '\0';
47+
JERRY_ASSERT (!strcmp ((char *) str_buff, (char *) str_buff2));
48+
jerry_release_value (str);
49+
50+
str = jerry_create_string ((jerry_char_t *) "Pterodactylus");
51+
str_size = jerry_get_utf8_string_size (str);
52+
jerry_string_to_utf8_char_buffer (str, str_buff, str_size);
53+
str_buff[str_size] = '\0';
54+
error = jerry_create_error_from_value (str, false);
55+
jerry_release_value (str);
56+
str = jerry_get_value_from_error (error, true);
57+
str_size = jerry_get_string_size (str);
58+
jerry_string_to_utf8_char_buffer (str, str_buff2, str_size);
59+
str_buff2[str_size] = '\0';
60+
JERRY_ASSERT (!strcmp ((char *) str_buff, (char *) str_buff2));
61+
jerry_release_value (str);
62+
63+
jerry_value_t num = jerry_create_number (3.1415926);
64+
double dNum = jerry_get_number_value (num);
65+
jerry_value_t num2 = jerry_create_error_from_value (num, true);
66+
num2 = jerry_get_value_from_error (num2, true);
67+
double dNum2 = jerry_get_number_value (num2);
68+
JERRY_ASSERT (dNum == dNum2);
69+
jerry_release_value (num2);
70+
71+
num = jerry_create_number (3.1415926);
72+
dNum = jerry_get_number_value (num);
73+
num2 = jerry_create_error_from_value (num, false);
74+
jerry_release_value (num);
75+
num2 = jerry_get_value_from_error (num2, true);
76+
dNum2 = jerry_get_number_value (num2);
77+
JERRY_ASSERT (dNum == dNum2);
78+
jerry_release_value (num2);
3479

3580
jerry_value_t value = jerry_create_number (42);
3681
value = jerry_get_value_from_error (value, true);
@@ -42,7 +87,7 @@ main (void)
4287
jerry_release_value (value2);
4388

4489
value = jerry_create_number (42);
45-
jerry_value_t error = jerry_create_error_from_value (value, true);
90+
error = jerry_create_error_from_value (value, true);
4691
error = jerry_create_error_from_value (error, true);
4792
jerry_release_value (error);
4893

0 commit comments

Comments
 (0)