@@ -62,6 +62,8 @@ static jerry_flag_t jerry_flags;
6262 */
6363static bool jerry_api_available ;
6464
65+ static const jerry_char_t * error_value_msg_p = (const jerry_char_t * ) "argument cannot have an error flag" ;
66+
6567/** \addtogroup jerry_extension Jerry engine extension interface
6668 * @{
6769 */
@@ -542,13 +544,18 @@ jerry_create_array_object (jerry_size_t size) /**< size of array */
542544 * Set value of field in the specified array object
543545 *
544546 * @return true, if field value was set successfully
545- * throw exception , otherwise
547+ * false , otherwise
546548 */
547549bool
548550jerry_set_array_index_value (jerry_object_t * array_obj_p , /**< array object */
549551 jerry_length_t index , /**< index to be written */
550552 jerry_value_t value ) /**< value to set */
551553{
554+ if (ECMA_IS_VALUE_ERROR (value ))
555+ {
556+ return false;
557+ }
558+
552559 ecma_string_t * str_idx_p = ecma_new_ecma_string_from_uint32 ((uint32_t ) index );
553560 ecma_value_t set_completion = ecma_op_object_put (array_obj_p , str_idx_p , value , false);
554561 JERRY_ASSERT (!ECMA_IS_VALUE_ERROR (set_completion ));
@@ -857,6 +864,11 @@ jerry_add_object_field (jerry_object_t *object_p, /**< object to add field at */
857864{
858865 jerry_assert_api_available ();
859866
867+ if (ECMA_IS_VALUE_ERROR (field_value ))
868+ {
869+ return false;
870+ }
871+
860872 bool is_successful = false;
861873
862874 if (ecma_get_object_extensible (object_p ))
@@ -1053,6 +1065,11 @@ jerry_set_object_field_value_sz (jerry_object_t *object_p, /**< object */
10531065{
10541066 jerry_assert_api_available ();
10551067
1068+ if (ECMA_IS_VALUE_ERROR (field_value ))
1069+ {
1070+ return false;
1071+ }
1072+
10561073 bool is_successful = true;
10571074
10581075 ecma_string_t * field_name_str_p = ecma_new_ecma_string_from_utf8 ((lit_utf8_byte_t * ) field_name_p ,
@@ -1235,6 +1252,14 @@ jerry_call_function (jerry_object_t *function_object_p, /**< function object to
12351252{
12361253 jerry_assert_api_available ();
12371254
1255+ for (uint16_t i = 0 ; i < args_count ; i ++ )
1256+ {
1257+ if (ECMA_IS_VALUE_ERROR (args_p [i ]))
1258+ {
1259+ return jerry_create_object_value (jerry_create_error (JERRY_ERROR_TYPE , error_value_msg_p ));
1260+ }
1261+ }
1262+
12381263 if (jerry_is_function (function_object_p ))
12391264 {
12401265 return jerry_invoke_function (false, function_object_p , this_arg_p , args_p , args_count );
@@ -1260,6 +1285,14 @@ jerry_construct_object (jerry_object_t *function_object_p, /**< function object
12601285{
12611286 jerry_assert_api_available ();
12621287
1288+ for (uint16_t i = 0 ; i < args_count ; i ++ )
1289+ {
1290+ if (ECMA_IS_VALUE_ERROR (args_p [i ]))
1291+ {
1292+ return jerry_create_object_value (jerry_create_error (JERRY_ERROR_TYPE , error_value_msg_p ));
1293+ }
1294+ }
1295+
12631296 if (jerry_is_constructor (function_object_p ))
12641297 {
12651298 return jerry_invoke_function (true, function_object_p , NULL , args_p , args_count );
@@ -2115,6 +2148,11 @@ jerry_value_to_boolean (const jerry_value_t value) /**< input value */
21152148{
21162149 jerry_assert_api_available ();
21172150
2151+ if (ECMA_IS_VALUE_ERROR (value ))
2152+ {
2153+ return false;
2154+ }
2155+
21182156 return ecma_op_to_boolean (value );
21192157} /* jerry_value_to_boolean */
21202158
@@ -2132,6 +2170,11 @@ jerry_value_to_number (const jerry_value_t value) /**< input value */
21322170{
21332171 jerry_assert_api_available ();
21342172
2173+ if (ECMA_IS_VALUE_ERROR (value ))
2174+ {
2175+ return jerry_create_object_value (jerry_create_error (JERRY_ERROR_TYPE , error_value_msg_p ));
2176+ }
2177+
21352178 return ecma_op_to_number (value );
21362179} /* jerry_value_to_number */
21372180
@@ -2149,6 +2192,11 @@ jerry_value_to_object (const jerry_value_t value) /**< input value */
21492192{
21502193 jerry_assert_api_available ();
21512194
2195+ if (ECMA_IS_VALUE_ERROR (value ))
2196+ {
2197+ return jerry_create_object_value (jerry_create_error (JERRY_ERROR_TYPE , error_value_msg_p ));
2198+ }
2199+
21522200 return ecma_op_to_object (value );
21532201} /* jerry_value_to_object */
21542202
@@ -2166,9 +2214,26 @@ jerry_value_to_string (const jerry_value_t value) /**< input value */
21662214{
21672215 jerry_assert_api_available ();
21682216
2217+ if (ECMA_IS_VALUE_ERROR (value ))
2218+ {
2219+ return jerry_create_object_value (jerry_create_error (JERRY_ERROR_TYPE , error_value_msg_p ));
2220+ }
2221+
21692222 return ecma_op_to_string (value );
21702223} /* jerry_value_to_string */
21712224
2225+ /**
2226+ * Remove the error flag
2227+ *
2228+ * @return converted normal value, if value is error
2229+ * unchanged value otherwise
2230+ */
2231+ jerry_value_t
2232+ jerry_value_remove_error_flag (const jerry_value_t value )
2233+ {
2234+ return (jerry_value_t ) (value & ~ECMA_VALUE_ERROR_FLAG );
2235+ } /* jerry_value_remove_error_flag */
2236+
21722237/**
21732238 * Get size of Jerry string
21742239 *
0 commit comments