Skip to content

Commit 73072b8

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 73072b8

File tree

2 files changed

+81
-6
lines changed

2 files changed

+81
-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: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,82 @@ 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_value_t error = jerry_create_error_from_value (str, true);
38+
str = jerry_get_value_from_error (error, true);
39+
jerry_size_t str_size = jerry_get_string_size (str);
40+
jerry_char_t str_buff[str_size];
41+
jerry_string_to_utf8_char_buffer (str, str_buff, str_size);
42+
str_buff[str_size] = '\0';
43+
JERRY_ASSERT (!strcmp ("Pterodactylus", (char *) str_buff));
44+
jerry_release_value (str);
45+
46+
str = jerry_create_string ((jerry_char_t *) "Pterodactylus");
47+
error = jerry_create_error_from_value (str, false);
48+
jerry_release_value (str);
49+
str = jerry_get_value_from_error (error, true);
50+
str_size = jerry_get_string_size (str);
51+
jerry_string_to_utf8_char_buffer (str, str_buff, str_size);
52+
str_buff[str_size] = '\0';
53+
JERRY_ASSERT (!strcmp ("Pterodactylus", (char *) str_buff));
54+
jerry_release_value (str);
55+
56+
double test_num = 3.1415926;
57+
jerry_value_t num = jerry_create_number (test_num);
58+
jerry_value_t num2 = jerry_create_error_from_value (num, false);
59+
JERRY_ASSERT (jerry_value_is_error (num2));
60+
jerry_release_value (num);
61+
num2 = jerry_get_value_from_error (num2, true);
62+
JERRY_ASSERT (jerry_get_number_value (num2) == test_num);
63+
jerry_release_value (num2);
64+
65+
num = jerry_create_number (test_num);
66+
num2 = jerry_create_error_from_value (num, true);
67+
JERRY_ASSERT (jerry_value_is_error (num2));
68+
num2 = jerry_get_value_from_error (num2, true);
69+
JERRY_ASSERT (jerry_get_number_value (num2) == test_num);
70+
jerry_release_value (num2);
71+
72+
num = jerry_create_number (test_num);
73+
num2 = jerry_create_error_from_value (num, false);
74+
JERRY_ASSERT (jerry_value_is_error (num2));
75+
jerry_release_value (num);
76+
jerry_value_t num3 = jerry_create_error_from_value (num2, false);
77+
JERRY_ASSERT (jerry_value_is_error (num3));
78+
jerry_release_value (num2);
79+
num2 = jerry_get_value_from_error (num3, true);
80+
JERRY_ASSERT (jerry_get_number_value (num2) == test_num);
81+
jerry_release_value (num2);
82+
83+
num = jerry_create_number (test_num);
84+
num2 = jerry_create_error_from_value (num, true);
85+
JERRY_ASSERT (jerry_value_is_error (num2));
86+
num3 = jerry_create_error_from_value (num2, true);
87+
JERRY_ASSERT (jerry_value_is_error (num3));
88+
num2 = jerry_get_value_from_error (num3, true);
89+
JERRY_ASSERT (jerry_get_number_value (num2) == test_num);
90+
jerry_release_value (num2);
91+
92+
num = jerry_create_number (test_num);
93+
jerry_value_set_abort_flag (&num);
94+
JERRY_ASSERT (jerry_value_is_abort (num));
95+
num2 = jerry_create_error_from_value (num, true);
96+
JERRY_ASSERT (jerry_value_is_error (num2));
97+
num = jerry_get_value_from_error (num2, true);
98+
JERRY_ASSERT (jerry_get_number_value (num) == test_num);
99+
jerry_release_value (num);
100+
101+
num = jerry_create_number (test_num);
102+
jerry_value_set_abort_flag (&num);
103+
JERRY_ASSERT (jerry_value_is_abort (num));
104+
num2 = jerry_create_error_from_value (num, false);
105+
jerry_release_value (num);
106+
JERRY_ASSERT (jerry_value_is_error (num2));
107+
num = jerry_get_value_from_error (num2, true);
108+
JERRY_ASSERT (jerry_get_number_value (num) == test_num);
109+
jerry_release_value (num);
34110

35111
jerry_value_t value = jerry_create_number (42);
36112
value = jerry_get_value_from_error (value, true);
@@ -42,7 +118,7 @@ main (void)
42118
jerry_release_value (value2);
43119

44120
value = jerry_create_number (42);
45-
jerry_value_t error = jerry_create_error_from_value (value, true);
121+
error = jerry_create_error_from_value (value, true);
46122
error = jerry_create_error_from_value (error, true);
47123
jerry_release_value (error);
48124

0 commit comments

Comments
 (0)