Remove jerry_get_arg_value function. (#2425)

Remove automatic conversion of errors. Errors are
primary values, just like numbers or strings.

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg 2018-07-19 03:13:40 +02:00 committed by yichoi
parent 66dddadfd2
commit 88589902e2
7 changed files with 137 additions and 223 deletions

View File

@ -13,16 +13,17 @@ Enum that contains the following elements:
## jerry_type_t
Enum that contains a set of elements to represent JavaScript type:
Enum that contains JerryScript API value types:
- JERRY_TYPE_NONE - no type information
- JERRY_TYPE_UNDEFINED - undefined value
- JERRY_TYPE_NULL - null value
- JERRY_TYPE_BOOLEAN - boolean value
- JERRY_TYPE_NUMBER - number value
- JERRY_TYPE_STRING - string value
- JERRY_TYPE_OBJECT - object value
- JERRY_TYPE_FUNCTION - function value
- JERRY_TYPE_UNDEFINED - undefined type
- JERRY_TYPE_NULL - null type
- JERRY_TYPE_BOOLEAN - boolean type
- JERRY_TYPE_NUMBER - number type
- JERRY_TYPE_STRING - string type
- JERRY_TYPE_OBJECT - object type
- JERRY_TYPE_FUNCTION - function type
- JERRY_TYPE_ERROR - error/abort type
## jerry_error_t

View File

@ -122,25 +122,6 @@ jerry_make_api_unavailable (void)
JERRY_CONTEXT (status_flags) &= (uint32_t) ~ECMA_STATUS_API_AVAILABLE;
} /* jerry_make_api_unavailable */
/**
* Remove the error flag from the argument value.
*
* Note:
* Compatiblity function, should go away with JerryScript 2.0
*
* @return return value for Jerry API functions
*/
static inline jerry_value_t JERRY_ATTR_ALWAYS_INLINE
jerry_get_arg_value (jerry_value_t value) /**< return value */
{
if (JERRY_UNLIKELY (ecma_is_value_error_reference (value)))
{
value = ecma_get_error_reference_from_value (value)->value;
}
return value;
} /* jerry_get_arg_value */
/**
* Create an API compatible return value.
*
@ -641,9 +622,8 @@ jerry_value_is_array (const jerry_value_t value) /**< jerry api value */
{
jerry_assert_api_available ();
jerry_value_t array = jerry_get_arg_value (value);
return (ecma_is_value_object (array)
&& ecma_get_object_type (ecma_get_object_from_value (array)) == ECMA_OBJECT_TYPE_ARRAY);
return (ecma_is_value_object (value)
&& ecma_get_object_type (ecma_get_object_from_value (value)) == ECMA_OBJECT_TYPE_ARRAY);
} /* jerry_value_is_array */
/**
@ -657,7 +637,7 @@ jerry_value_is_boolean (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
return ecma_is_value_boolean (jerry_get_arg_value (value));
return ecma_is_value_boolean (value);
} /* jerry_value_is_boolean */
/**
@ -671,7 +651,7 @@ jerry_value_is_constructor (const jerry_value_t value) /**< jerry api value */
{
jerry_assert_api_available ();
return ecma_is_constructor (jerry_get_arg_value (value));
return ecma_is_constructor (value);
} /* jerry_value_is_constructor */
/**
@ -699,7 +679,7 @@ jerry_value_is_function (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
return ecma_op_is_callable (jerry_get_arg_value (value));
return ecma_op_is_callable (value);
} /* jerry_value_is_function */
/**
@ -713,7 +693,7 @@ jerry_value_is_number (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
return ecma_is_value_number (jerry_get_arg_value (value));
return ecma_is_value_number (value);
} /* jerry_value_is_number */
/**
@ -727,7 +707,7 @@ jerry_value_is_null (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
return ecma_is_value_null (jerry_get_arg_value (value));
return ecma_is_value_null (value);
} /* jerry_value_is_null */
/**
@ -741,7 +721,7 @@ jerry_value_is_object (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
return ecma_is_value_object (jerry_get_arg_value (value));
return ecma_is_value_object (value);
} /* jerry_value_is_object */
/**
@ -755,9 +735,8 @@ jerry_value_is_promise (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_PROMISE_BUILTIN
jerry_value_t promise = jerry_get_arg_value (value);
return (ecma_is_value_object (promise)
&& ecma_is_promise (ecma_get_object_from_value (promise)));
return (ecma_is_value_object (value)
&& ecma_is_promise (ecma_get_object_from_value (value)));
#else /* CONFIG_DISABLE_ES2015_PROMISE_BUILTIN */
JERRY_UNUSED (value);
return false;
@ -775,7 +754,7 @@ jerry_value_is_string (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
return ecma_is_value_string (jerry_get_arg_value (value));
return ecma_is_value_string (value);
} /* jerry_value_is_string */
/**
@ -789,7 +768,7 @@ jerry_value_is_undefined (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
return ecma_is_value_undefined (jerry_get_arg_value (value));
return ecma_is_value_undefined (value);
} /* jerry_value_is_undefined */
/**
@ -802,8 +781,12 @@ jerry_value_get_type (const jerry_value_t value) /**< input value to check */
{
jerry_assert_api_available ();
jerry_value_t argument = jerry_get_arg_value (value);
lit_magic_string_id_t lit_id = ecma_get_typeof_lit_id (argument);
if (ecma_is_value_error_reference (value))
{
return JERRY_TYPE_ERROR;
}
lit_magic_string_id_t lit_id = ecma_get_typeof_lit_id (value);
JERRY_ASSERT (lit_id != LIT_MAGIC_STRING__EMPTY);
@ -836,7 +819,7 @@ jerry_value_get_type (const jerry_value_t value) /**< input value to check */
/* Based on the ECMA 262 5.1 standard the 'null' value is an object.
* Thus we'll do an extra check for 'null' here.
*/
return ecma_is_value_null (argument) ? JERRY_TYPE_NULL : JERRY_TYPE_OBJECT;
return ecma_is_value_null (value) ? JERRY_TYPE_NULL : JERRY_TYPE_OBJECT;
}
}
} /* jerry_value_get_type */
@ -1012,16 +995,19 @@ jerry_get_value_from_error (jerry_value_t value, /**< api value */
* JERRY_ERROR_NONE - if the input value is not an Error object
*/
jerry_error_t
jerry_get_error_type (const jerry_value_t value) /**< api value */
jerry_get_error_type (jerry_value_t value) /**< api value */
{
jerry_value_t object = jerry_get_arg_value (value);
if (JERRY_UNLIKELY (ecma_is_value_error_reference (value)))
{
value = ecma_get_error_reference_from_value (value)->value;
}
if (!ecma_is_value_object (object))
if (!ecma_is_value_object (value))
{
return JERRY_ERROR_NONE;
}
ecma_object_t *object_p = ecma_get_object_from_value (object);
ecma_object_t *object_p = ecma_get_object_from_value (value);
ecma_standard_error_t error_type = ecma_get_error_type (object_p);
return (jerry_error_t) error_type;
@ -1037,14 +1023,7 @@ jerry_get_boolean_value (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
jerry_value_t boolean = jerry_get_arg_value (value);
if (!ecma_is_value_boolean (boolean))
{
return false;
}
return ecma_is_value_true (boolean);
return ecma_is_value_true (value);
} /* jerry_get_boolean_value */
/**
@ -1057,14 +1036,12 @@ jerry_get_number_value (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
jerry_value_t number = jerry_get_arg_value (value);
if (!ecma_is_value_number (number))
if (!ecma_is_value_number (value))
{
return 0;
}
return (double) ecma_get_number_from_value (number);
return (double) ecma_get_number_from_value (value);
} /* jerry_get_number_value */
/**
@ -1515,14 +1492,12 @@ jerry_get_array_length (const jerry_value_t value) /**< api value */
{
jerry_assert_api_available ();
jerry_value_t array = jerry_get_arg_value (value);
if (!jerry_value_is_array (array))
if (!jerry_value_is_array (value))
{
return 0;
}
ecma_value_t len_value = ecma_op_object_get_by_magic_id (ecma_get_object_from_value (array),
ecma_value_t len_value = ecma_op_object_get_by_magic_id (ecma_get_object_from_value (value),
LIT_MAGIC_STRING_LENGTH);
jerry_length_t length = ecma_number_to_uint32 (ecma_get_number_from_value (len_value));
@ -1544,14 +1519,12 @@ jerry_get_string_size (const jerry_value_t value) /**< input string */
{
jerry_assert_api_available ();
jerry_value_t string = jerry_get_arg_value (value);
if (!ecma_is_value_string (string))
if (!ecma_is_value_string (value))
{
return 0;
}
return ecma_string_get_size (ecma_get_string_from_value (string));
return ecma_string_get_size (ecma_get_string_from_value (value));
} /* jerry_get_string_size */
/**
@ -1567,14 +1540,12 @@ jerry_get_utf8_string_size (const jerry_value_t value) /**< input string */
{
jerry_assert_api_available ();
jerry_value_t string = jerry_get_arg_value (value);
if (!ecma_is_value_string (string))
if (!ecma_is_value_string (value))
{
return 0;
}
return ecma_string_get_utf8_size (ecma_get_string_from_value (string));
return ecma_string_get_utf8_size (ecma_get_string_from_value (value));
} /* jerry_get_utf8_string_size */
/**
@ -1590,14 +1561,12 @@ jerry_get_string_length (const jerry_value_t value) /**< input string */
{
jerry_assert_api_available ();
jerry_value_t string = jerry_get_arg_value (value);
if (!ecma_is_value_string (string))
if (!ecma_is_value_string (value))
{
return 0;
}
return ecma_string_get_length (ecma_get_string_from_value (string));
return ecma_string_get_length (ecma_get_string_from_value (value));
} /* jerry_get_string_length */
/**
@ -1613,14 +1582,12 @@ jerry_get_utf8_string_length (const jerry_value_t value) /**< input string */
{
jerry_assert_api_available ();
jerry_value_t string = jerry_get_arg_value (value);
if (!ecma_is_value_string (string))
if (!ecma_is_value_string (value))
{
return 0;
}
return ecma_string_get_utf8_length (ecma_get_string_from_value (string));
return ecma_string_get_utf8_length (ecma_get_string_from_value (value));
} /* jerry_get_utf8_string_length */
/**
@ -1645,14 +1612,12 @@ jerry_string_to_char_buffer (const jerry_value_t value, /**< input string value
{
jerry_assert_api_available ();
jerry_value_t string = jerry_get_arg_value (value);
if (!ecma_is_value_string (string) || buffer_p == NULL)
if (!ecma_is_value_string (value) || buffer_p == NULL)
{
return 0;
}
ecma_string_t *str_p = ecma_get_string_from_value (string);
ecma_string_t *str_p = ecma_get_string_from_value (value);
if (ecma_string_get_size (str_p) > buffer_size)
{
@ -1686,14 +1651,12 @@ jerry_string_to_utf8_char_buffer (const jerry_value_t value, /**< input string v
{
jerry_assert_api_available ();
jerry_value_t string = jerry_get_arg_value (value);
if (!ecma_is_value_string (string) || buffer_p == NULL)
if (!ecma_is_value_string (value) || buffer_p == NULL)
{
return 0;
}
ecma_string_t *str_p = ecma_get_string_from_value (string);
ecma_string_t *str_p = ecma_get_string_from_value (value);
if (ecma_string_get_utf8_size (str_p) > buffer_size)
{
@ -1725,14 +1688,12 @@ jerry_substring_to_char_buffer (const jerry_value_t value, /**< input string val
{
jerry_assert_api_available ();
jerry_value_t string = jerry_get_arg_value (value);
if (!ecma_is_value_string (string) || buffer_p == NULL)
if (!ecma_is_value_string (value) || buffer_p == NULL)
{
return 0;
}
ecma_string_t *str_p = ecma_get_string_from_value (string);
ecma_string_t *str_p = ecma_get_string_from_value (value);
return ecma_substring_copy_to_cesu8_buffer (str_p,
start_pos,
@ -1761,14 +1722,12 @@ jerry_substring_to_utf8_char_buffer (const jerry_value_t value, /**< input strin
{
jerry_assert_api_available ();
jerry_value_t string = jerry_get_arg_value (value);
if (!ecma_is_value_string (string) || buffer_p == NULL)
if (!ecma_is_value_string (value) || buffer_p == NULL)
{
return 0;
}
ecma_string_t *str_p = ecma_get_string_from_value (string);
ecma_string_t *str_p = ecma_get_string_from_value (value);
return ecma_substring_copy_to_utf8_buffer (str_p,
start_pos,
@ -1789,17 +1748,14 @@ jerry_has_property (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
jerry_value_t prop_name_value = jerry_get_arg_value (prop_name_val);
if (!ecma_is_value_object (obj_value)
|| !ecma_is_value_string (prop_name_value))
if (!ecma_is_value_object (obj_val)
|| !ecma_is_value_string (prop_name_val))
{
return ecma_make_boolean_value (false);
}
bool has_property = ecma_op_object_has_property (ecma_get_object_from_value (obj_value),
ecma_get_string_from_value (prop_name_value));
bool has_property = ecma_op_object_has_property (ecma_get_object_from_value (obj_val),
ecma_get_string_from_value (prop_name_val));
return ecma_make_boolean_value (has_property);
} /* jerry_has_property */
@ -1816,17 +1772,14 @@ jerry_has_own_property (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
jerry_value_t prop_name_value = jerry_get_arg_value (prop_name_val);
if (!ecma_is_value_object (obj_value)
|| !ecma_is_value_string (prop_name_value))
if (!ecma_is_value_object (obj_val)
|| !ecma_is_value_string (prop_name_val))
{
return ecma_make_boolean_value (false);
}
bool has_property = ecma_op_object_has_own_property (ecma_get_object_from_value (obj_value),
ecma_get_string_from_value (prop_name_value));
bool has_property = ecma_op_object_has_own_property (ecma_get_object_from_value (obj_val),
ecma_get_string_from_value (prop_name_val));
return ecma_make_boolean_value (has_property);
} /* jerry_has_own_property */
@ -1843,17 +1796,14 @@ jerry_delete_property (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
jerry_value_t prop_name_value = jerry_get_arg_value (prop_name_val);
if (!ecma_is_value_object (obj_value)
|| !ecma_is_value_string (prop_name_value))
if (!ecma_is_value_object (obj_val)
|| !ecma_is_value_string (prop_name_val))
{
return false;
}
ecma_value_t ret_value = ecma_op_object_delete (ecma_get_object_from_value (obj_value),
ecma_get_string_from_value (prop_name_value),
ecma_value_t ret_value = ecma_op_object_delete (ecma_get_object_from_value (obj_val),
ecma_get_string_from_value (prop_name_val),
false);
return ecma_is_value_true (ret_value);
} /* jerry_delete_property */
@ -1870,15 +1820,13 @@ jerry_delete_property_by_index (const jerry_value_t obj_val, /**< object value *
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (!ecma_is_value_object (obj_value))
if (!ecma_is_value_object (obj_val))
{
return false;
}
ecma_string_t *str_idx_p = ecma_new_ecma_string_from_uint32 (index);
ecma_value_t ret_value = ecma_op_object_delete (ecma_get_object_from_value (obj_value),
ecma_value_t ret_value = ecma_op_object_delete (ecma_get_object_from_value (obj_val),
str_idx_p,
false);
ecma_deref_ecma_string (str_idx_p);
@ -1901,17 +1849,14 @@ jerry_get_property (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
jerry_value_t prop_name_value = jerry_get_arg_value (prop_name_val);
if (!ecma_is_value_object (obj_value)
|| !ecma_is_value_string (prop_name_value))
if (!ecma_is_value_object (obj_val)
|| !ecma_is_value_string (prop_name_val))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (wrong_args_msg_p)));
}
jerry_value_t ret_value = ecma_op_object_get (ecma_get_object_from_value (obj_value),
ecma_get_string_from_value (prop_name_value));
jerry_value_t ret_value = ecma_op_object_get (ecma_get_object_from_value (obj_val),
ecma_get_string_from_value (prop_name_val));
return jerry_return (ret_value);
} /* jerry_get_property */
@ -1930,15 +1875,13 @@ jerry_get_property_by_index (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (!ecma_is_value_object (obj_value))
if (!ecma_is_value_object (obj_val))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (wrong_args_msg_p)));
}
ecma_string_t *str_idx_p = ecma_new_ecma_string_from_uint32 (index);
ecma_value_t ret_value = ecma_op_object_get (ecma_get_object_from_value (obj_value), str_idx_p);
ecma_value_t ret_value = ecma_op_object_get (ecma_get_object_from_value (obj_val), str_idx_p);
ecma_deref_ecma_string (str_idx_p);
return jerry_return (ret_value);
@ -1960,18 +1903,15 @@ jerry_set_property (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
jerry_value_t prop_name_value = jerry_get_arg_value (prop_name_val);
if (ecma_is_value_error_reference (value_to_set)
|| !ecma_is_value_object (obj_value)
|| !ecma_is_value_string (prop_name_value))
|| !ecma_is_value_object (obj_val)
|| !ecma_is_value_string (prop_name_val))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (wrong_args_msg_p)));
}
return jerry_return (ecma_op_object_put (ecma_get_object_from_value (obj_value),
ecma_get_string_from_value (prop_name_value),
return jerry_return (ecma_op_object_put (ecma_get_object_from_value (obj_val),
ecma_get_string_from_value (prop_name_val),
value_to_set,
true));
} /* jerry_set_property */
@ -1992,16 +1932,14 @@ jerry_set_property_by_index (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (ecma_is_value_error_reference (value_to_set)
|| !ecma_is_value_object (obj_value))
|| !ecma_is_value_object (obj_val))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (wrong_args_msg_p)));
}
ecma_string_t *str_idx_p = ecma_new_ecma_string_from_uint32 ((uint32_t) index);
ecma_value_t ret_value = ecma_op_object_put (ecma_get_object_from_value (obj_value),
ecma_value_t ret_value = ecma_op_object_put (ecma_get_object_from_value (obj_val),
str_idx_p,
value_to_set,
true);
@ -2046,11 +1984,8 @@ jerry_define_own_property (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
jerry_value_t prop_name_value = jerry_get_arg_value (prop_name_val);
if (!ecma_is_value_object (obj_value)
|| !ecma_is_value_string (prop_name_value))
if (!ecma_is_value_object (obj_val)
|| !ecma_is_value_string (prop_name_val))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (wrong_args_msg_p)));
}
@ -2129,8 +2064,8 @@ jerry_define_own_property (const jerry_value_t obj_val, /**< object value */
}
}
return ecma_op_object_define_own_property (ecma_get_object_from_value (obj_value),
ecma_get_string_from_value (prop_name_value),
return ecma_op_object_define_own_property (ecma_get_object_from_value (obj_val),
ecma_get_string_from_value (prop_name_val),
&prop_desc,
true);
} /* jerry_define_own_property */
@ -2148,19 +2083,16 @@ jerry_get_own_property_descriptor (const jerry_value_t obj_val, /**< object val
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
jerry_value_t prop_name_value = jerry_get_arg_value (prop_name_val);
if (!ecma_is_value_object (obj_value)
|| !ecma_is_value_string (prop_name_value))
if (!ecma_is_value_object (obj_val)
|| !ecma_is_value_string (prop_name_val))
{
return false;
}
ecma_property_descriptor_t prop_desc;
if (!ecma_op_object_get_own_property_descriptor (ecma_get_object_from_value (obj_value),
ecma_get_string_from_value (prop_name_value),
if (!ecma_op_object_get_own_property_descriptor (ecma_get_object_from_value (obj_val),
ecma_get_string_from_value (prop_name_val),
&prop_desc))
{
return false;
@ -2355,14 +2287,12 @@ jerry_get_object_keys (const jerry_value_t obj_val) /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (!ecma_is_value_object (obj_value))
if (!ecma_is_value_object (obj_val))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (wrong_args_msg_p)));
}
return ecma_builtin_helper_object_get_properties (ecma_get_object_from_value (obj_value), true);
return ecma_builtin_helper_object_get_properties (ecma_get_object_from_value (obj_val), true);
} /* jerry_get_object_keys */
/**
@ -2376,14 +2306,12 @@ jerry_get_prototype (const jerry_value_t obj_val) /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (!ecma_is_value_object (obj_value))
if (!ecma_is_value_object (obj_val))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (wrong_args_msg_p)));
}
ecma_object_t *proto_obj_p = ecma_get_object_prototype (ecma_get_object_from_value (obj_value));
ecma_object_t *proto_obj_p = ecma_get_object_prototype (ecma_get_object_from_value (obj_val));
if (proto_obj_p == NULL)
{
@ -2405,9 +2333,7 @@ jerry_set_prototype (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (!ecma_is_value_object (obj_value)
if (!ecma_is_value_object (obj_val)
|| ecma_is_value_error_reference (proto_obj_val)
|| (!ecma_is_value_object (proto_obj_val) && !ecma_is_value_null (proto_obj_val)))
{
@ -2416,11 +2342,11 @@ jerry_set_prototype (const jerry_value_t obj_val, /**< object value */
if (ecma_is_value_null (proto_obj_val))
{
ECMA_SET_POINTER (ecma_get_object_from_value (obj_value)->prototype_or_outer_reference_cp, NULL);
ECMA_SET_POINTER (ecma_get_object_from_value (obj_val)->prototype_or_outer_reference_cp, NULL);
}
else
{
ECMA_SET_POINTER (ecma_get_object_from_value (obj_value)->prototype_or_outer_reference_cp,
ECMA_SET_POINTER (ecma_get_object_from_value (obj_val)->prototype_or_outer_reference_cp,
ecma_get_object_from_value (proto_obj_val));
}
@ -2441,15 +2367,13 @@ jerry_get_object_native_handle (const jerry_value_t obj_val, /**< object to get
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (!ecma_is_value_object (obj_value))
if (!ecma_is_value_object (obj_val))
{
return false;
}
ecma_native_pointer_t *native_pointer_p;
native_pointer_p = ecma_get_native_pointer_value (ecma_get_object_from_value (obj_value),
native_pointer_p = ecma_get_native_pointer_value (ecma_get_object_from_value (obj_val),
LIT_INTERNAL_MAGIC_STRING_NATIVE_HANDLE);
if (native_pointer_p == NULL)
@ -2482,11 +2406,9 @@ jerry_set_object_native_handle (const jerry_value_t obj_val, /**< object to set
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (ecma_is_value_object (obj_value))
if (ecma_is_value_object (obj_val))
{
ecma_object_t *object_p = ecma_get_object_from_value (obj_value);
ecma_object_t *object_p = ecma_get_object_from_value (obj_val);
ecma_create_native_handle_property (object_p,
(void *) handle_p,
@ -2579,15 +2501,13 @@ jerry_get_object_native_pointer (const jerry_value_t obj_val, /**< object to get
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (!ecma_is_value_object (obj_value))
if (!ecma_is_value_object (obj_val))
{
return false;
}
ecma_native_pointer_t *native_pointer_p;
native_pointer_p = ecma_get_native_pointer_value (ecma_get_object_from_value (obj_value),
native_pointer_p = ecma_get_native_pointer_value (ecma_get_object_from_value (obj_val),
LIT_INTERNAL_MAGIC_STRING_NATIVE_POINTER);
if (native_pointer_p == NULL)
@ -2628,11 +2548,9 @@ jerry_set_object_native_pointer (const jerry_value_t obj_val, /**< object to set
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (ecma_is_value_object (obj_value))
if (ecma_is_value_object (obj_val))
{
ecma_object_t *object_p = ecma_get_object_from_value (obj_value);
ecma_object_t *object_p = ecma_get_object_from_value (obj_val);
ecma_create_native_pointer_property (object_p, native_pointer_p, (void *) native_info_p);
}
@ -2654,14 +2572,12 @@ jerry_foreach_object_property (const jerry_value_t obj_val, /**< object value */
{
jerry_assert_api_available ();
jerry_value_t obj_value = jerry_get_arg_value (obj_val);
if (!ecma_is_value_object (obj_value))
if (!ecma_is_value_object (obj_val))
{
return false;
}
ecma_object_t *object_p = ecma_get_object_from_value (obj_value);
ecma_object_t *object_p = ecma_get_object_from_value (obj_val);
ecma_collection_header_t *names_p = ecma_op_object_get_property_names (object_p, false, true, true);
ecma_value_t *ecma_value_p = ecma_collection_iterator_init (names_p);
@ -2892,8 +2808,7 @@ jerry_value_is_arraybuffer (const jerry_value_t value) /**< value to check if it
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t buffer = jerry_get_arg_value (value);
return ecma_is_arraybuffer (buffer);
return ecma_is_arraybuffer (value);
#else /* CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
JERRY_UNUSED (value);
return false;
@ -2976,14 +2891,12 @@ jerry_arraybuffer_write (const jerry_value_t value, /**< target ArrayBuffer */
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t buffer = jerry_get_arg_value (value);
if (!ecma_is_arraybuffer (buffer))
if (!ecma_is_arraybuffer (value))
{
return 0;
}
ecma_object_t *buffer_p = ecma_get_object_from_value (buffer);
ecma_object_t *buffer_p = ecma_get_object_from_value (value);
jerry_length_t length = ecma_arraybuffer_get_length (buffer_p);
if (offset >= length)
@ -3027,14 +2940,12 @@ jerry_arraybuffer_read (const jerry_value_t value, /**< ArrayBuffer to read from
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t buffer = jerry_get_arg_value (value);
if (!ecma_is_arraybuffer (buffer))
if (!ecma_is_arraybuffer (value))
{
return 0;
}
ecma_object_t *buffer_p = ecma_get_object_from_value (buffer);
ecma_object_t *buffer_p = ecma_get_object_from_value (value);
jerry_length_t length = ecma_arraybuffer_get_length (buffer_p);
if (offset >= length)
@ -3075,10 +2986,9 @@ jerry_get_arraybuffer_byte_length (const jerry_value_t value) /**< ArrayBuffer *
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t buffer = jerry_get_arg_value (value);
if (ecma_is_arraybuffer (buffer))
if (ecma_is_arraybuffer (value))
{
ecma_object_t *buffer_p = ecma_get_object_from_value (buffer);
ecma_object_t *buffer_p = ecma_get_object_from_value (value);
return ecma_arraybuffer_get_length (buffer_p);
}
#else /* CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
@ -3105,14 +3015,12 @@ jerry_get_arraybuffer_pointer (const jerry_value_t value) /**< Array Buffer to u
{
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t buffer = jerry_get_arg_value (value);
if (!ecma_is_arraybuffer (buffer))
if (!ecma_is_arraybuffer (value))
{
return NULL;
}
ecma_object_t *buffer_p = ecma_get_object_from_value (buffer);
ecma_object_t *buffer_p = ecma_get_object_from_value (value);
if (ECMA_ARRAYBUFFER_HAS_EXTERNAL_MEMORY (buffer_p))
{
jerry_acquire_value (value);
@ -3143,8 +3051,7 @@ jerry_value_is_typedarray (jerry_value_t value) /**< value to check if it is a T
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t array = jerry_get_arg_value (value);
return ecma_is_typedarray (array);
return ecma_is_typedarray (value);
#else /* CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
JERRY_UNUSED (value);
return false;
@ -3291,8 +3198,7 @@ jerry_create_typedarray_for_arraybuffer_sz (jerry_typedarray_type_t type_name, /
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG ("incorrect type for TypedArray.")));
}
jerry_value_t buffer = jerry_get_arg_value (arraybuffer);
if (!ecma_is_arraybuffer (buffer))
if (!ecma_is_arraybuffer (arraybuffer))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG ("Argument is not an ArrayBuffer")));
}
@ -3350,13 +3256,12 @@ jerry_get_typedarray_type (jerry_value_t value) /**< object to get the TypedArra
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t array = jerry_get_arg_value (value);
if (!ecma_is_typedarray (array))
if (!ecma_is_typedarray (value))
{
return JERRY_TYPEDARRAY_INVALID;
}
ecma_object_t *array_p = ecma_get_object_from_value (array);
ecma_object_t *array_p = ecma_get_object_from_value (value);
lit_magic_string_id_t class_name_id = ecma_object_get_class_name (array_p);
for (uint32_t i = 0; i < sizeof (jerry_typedarray_mappings) / sizeof (jerry_typedarray_mappings[0]); i++)
@ -3384,10 +3289,9 @@ jerry_get_typedarray_length (jerry_value_t value) /**< TypedArray to query */
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t array = jerry_get_arg_value (value);
if (ecma_is_typedarray (array))
if (ecma_is_typedarray (value))
{
ecma_object_t *array_p = ecma_get_object_from_value (array);
ecma_object_t *array_p = ecma_get_object_from_value (value);
return ecma_typedarray_get_length (array_p);
}
#else /* CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN */
@ -3417,13 +3321,12 @@ jerry_get_typedarray_buffer (jerry_value_t value, /**< TypedArray to get the arr
jerry_assert_api_available ();
#ifndef CONFIG_DISABLE_ES2015_TYPEDARRAY_BUILTIN
jerry_value_t array = jerry_get_arg_value (value);
if (!ecma_is_typedarray (array))
if (!ecma_is_typedarray (value))
{
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG ("Object is not a TypedArray.")));
}
ecma_object_t *array_p = ecma_get_object_from_value (array);
ecma_object_t *array_p = ecma_get_object_from_value (value);
uint8_t shift = ecma_typedarray_get_element_size_shift (array_p);
if (byte_length != NULL)

View File

@ -367,6 +367,7 @@ typedef enum
JERRY_TYPE_STRING, /**< string type */
JERRY_TYPE_OBJECT, /**< object type */
JERRY_TYPE_FUNCTION, /**< function type */
JERRY_TYPE_ERROR, /**< error/abort type */
} jerry_type_t;
jerry_type_t jerry_value_get_type (const jerry_value_t value);
@ -386,7 +387,7 @@ jerry_value_t jerry_get_value_from_error (jerry_value_t value, bool release);
/**
* Error object function(s).
*/
jerry_error_t jerry_get_error_type (const jerry_value_t value);
jerry_error_t jerry_get_error_type (jerry_value_t value);
/**
* Getter functions of 'jerry_value_t'.

View File

@ -35,10 +35,14 @@ jerryx_module_create_error (jerry_error_t error_type, /**< the type of error to
const jerry_value_t module_name) /**< the module name */
{
jerry_value_t ret = jerry_create_error (error_type, message);
jerry_value_t error_object = jerry_get_value_from_error (ret, false);
jerry_value_t property_name = jerry_create_string (module_name_property_name);
jerry_release_value (jerry_set_property (ret, property_name, module_name));
jerry_release_value (jerry_set_property (error_object, property_name, module_name));
jerry_release_value (property_name);
jerry_release_value (error_object);
return ret;
} /* jerryx_module_create_error */

View File

@ -63,7 +63,7 @@ main (void)
ENTRY (JERRY_TYPE_OBJECT, jerry_create_object ()),
ENTRY (JERRY_TYPE_OBJECT, jerry_create_array (10)),
ENTRY (JERRY_TYPE_OBJECT, jerry_create_error (JERRY_ERROR_TYPE, (const jerry_char_t *) "error")),
ENTRY (JERRY_TYPE_ERROR, jerry_create_error (JERRY_ERROR_TYPE, (const jerry_char_t *) "error")),
ENTRY (JERRY_TYPE_NULL, jerry_create_null ()),

View File

@ -854,6 +854,7 @@ main (void)
jerry_release_value (val_t);
/* 'res' should contain exception object */
res = jerry_get_value_from_error (res, true);
TEST_ASSERT (jerry_value_is_object (res));
jerry_release_value (res);
@ -863,6 +864,7 @@ main (void)
TEST_ASSERT (jerry_value_is_error (res));
/* 'res' should contain exception object */
res = jerry_get_value_from_error (res, true);
TEST_ASSERT (jerry_value_is_object (res));
jerry_release_value (res);
@ -878,6 +880,7 @@ main (void)
jerry_release_value (val_t);
/* 'res' should contain exception object */
res = jerry_get_value_from_error (res, true);
TEST_ASSERT (jerry_value_is_object (res));
jerry_release_value (res);
@ -887,6 +890,7 @@ main (void)
TEST_ASSERT (jerry_value_is_error (res));
/* 'res' should contain exception object */
res = jerry_get_value_from_error (res, true);
TEST_ASSERT (jerry_value_is_object (res));
jerry_release_value (res);

View File

@ -39,6 +39,7 @@ main (int argc, char **argv)
TEST_ASSERT (jerry_value_is_error (module));
/* Retrieve the error message. */
module = jerry_get_value_from_error (module, true);
jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "message");
jerry_value_t prop = jerry_get_property (module, prop_name);