@@ -62,6 +62,8 @@ static jerry_flag_t jerry_flags;
62
62
*/
63
63
static bool jerry_api_available ;
64
64
65
+ static const jerry_char_t * error_value_msg_p = (const jerry_char_t * ) "argument cannot have an error flag" ;
66
+
65
67
/** \addtogroup jerry_extension Jerry engine extension interface
66
68
* @{
67
69
*/
@@ -542,13 +544,18 @@ jerry_create_array_object (jerry_size_t size) /**< size of array */
542
544
* Set value of field in the specified array object
543
545
*
544
546
* @return true, if field value was set successfully
545
- * throw exception , otherwise
547
+ * false , otherwise
546
548
*/
547
549
bool
548
550
jerry_set_array_index_value (jerry_object_t * array_obj_p , /**< array object */
549
551
jerry_length_t index , /**< index to be written */
550
552
jerry_value_t value ) /**< value to set */
551
553
{
554
+ if (ECMA_IS_VALUE_ERROR (value ))
555
+ {
556
+ return false;
557
+ }
558
+
552
559
ecma_string_t * str_idx_p = ecma_new_ecma_string_from_uint32 ((uint32_t ) index );
553
560
ecma_value_t set_completion = ecma_op_object_put (array_obj_p , str_idx_p , value , false);
554
561
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 */
857
864
{
858
865
jerry_assert_api_available ();
859
866
867
+ if (ECMA_IS_VALUE_ERROR (field_value ))
868
+ {
869
+ return false;
870
+ }
871
+
860
872
bool is_successful = false;
861
873
862
874
if (ecma_get_object_extensible (object_p ))
@@ -1053,6 +1065,11 @@ jerry_set_object_field_value_sz (jerry_object_t *object_p, /**< object */
1053
1065
{
1054
1066
jerry_assert_api_available ();
1055
1067
1068
+ if (ECMA_IS_VALUE_ERROR (field_value ))
1069
+ {
1070
+ return false;
1071
+ }
1072
+
1056
1073
bool is_successful = true;
1057
1074
1058
1075
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
1235
1252
{
1236
1253
jerry_assert_api_available ();
1237
1254
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
+
1238
1263
if (jerry_is_function (function_object_p ))
1239
1264
{
1240
1265
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
1260
1285
{
1261
1286
jerry_assert_api_available ();
1262
1287
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
+
1263
1296
if (jerry_is_constructor (function_object_p ))
1264
1297
{
1265
1298
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 */
2115
2148
{
2116
2149
jerry_assert_api_available ();
2117
2150
2151
+ if (ECMA_IS_VALUE_ERROR (value ))
2152
+ {
2153
+ return false;
2154
+ }
2155
+
2118
2156
return ecma_op_to_boolean (value );
2119
2157
} /* jerry_value_to_boolean */
2120
2158
@@ -2132,6 +2170,11 @@ jerry_value_to_number (const jerry_value_t value) /**< input value */
2132
2170
{
2133
2171
jerry_assert_api_available ();
2134
2172
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
+
2135
2178
return ecma_op_to_number (value );
2136
2179
} /* jerry_value_to_number */
2137
2180
@@ -2149,6 +2192,11 @@ jerry_value_to_object (const jerry_value_t value) /**< input value */
2149
2192
{
2150
2193
jerry_assert_api_available ();
2151
2194
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
+
2152
2200
return ecma_op_to_object (value );
2153
2201
} /* jerry_value_to_object */
2154
2202
@@ -2166,9 +2214,26 @@ jerry_value_to_string (const jerry_value_t value) /**< input value */
2166
2214
{
2167
2215
jerry_assert_api_available ();
2168
2216
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
+
2169
2222
return ecma_op_to_string (value );
2170
2223
} /* jerry_value_to_string */
2171
2224
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
+
2172
2237
/**
2173
2238
* Get size of Jerry string
2174
2239
*
0 commit comments