Introducing ecma_get_[type]_from_value, ecma_get_[type]_from_completion_value and ecma_get_completion_value_value interfaces.
This commit is contained in:
@@ -215,9 +215,9 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o
|
||||
}
|
||||
|
||||
JERRY_ASSERT (ecma_is_completion_value_normal (completion)
|
||||
&& ecma_is_value_number (completion.u.value));
|
||||
&& ecma_is_value_number (ecma_get_completion_value_value (completion)));
|
||||
|
||||
new_len_num = *(ecma_number_t*) ECMA_GET_NON_NULL_POINTER (completion.u.value.value);
|
||||
new_len_num = *ecma_get_number_from_completion_value (completion);
|
||||
|
||||
ecma_free_completion_value (completion);
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ ecma_op_create_boolean_object (ecma_value_t arg) /**< argument passed to the Boo
|
||||
return conv_to_boolean_completion;
|
||||
}
|
||||
|
||||
ecma_simple_value_t bool_value = conv_to_boolean_completion.u.value.value;
|
||||
ecma_simple_value_t bool_value = ecma_get_completion_value_value (conv_to_boolean_completion).value;
|
||||
|
||||
JERRY_ASSERT (bool_value == ECMA_SIMPLE_VALUE_TRUE || bool_value == ECMA_SIMPLE_VALUE_FALSE);
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_op_abstract_equality_compare (x,
|
||||
y_num_value.u.value);
|
||||
ecma_get_completion_value_value (y_num_value));
|
||||
|
||||
ECMA_FINALIZE (y_num_value);
|
||||
}
|
||||
@@ -144,7 +144,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
||||
ecma_op_to_number (x),
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_op_abstract_equality_compare (x_num_value.u.value,
|
||||
ret_value = ecma_op_abstract_equality_compare (ecma_get_completion_value_value (x_num_value),
|
||||
y);
|
||||
|
||||
ECMA_FINALIZE (x_num_value);
|
||||
@@ -156,7 +156,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
||||
ecma_op_to_number (x),
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_op_abstract_equality_compare (x_num_value.u.value,
|
||||
ret_value = ecma_op_abstract_equality_compare (ecma_get_completion_value_value (x_num_value),
|
||||
y);
|
||||
|
||||
ECMA_FINALIZE (x_num_value);
|
||||
@@ -169,7 +169,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_op_abstract_equality_compare (x,
|
||||
y_num_value.u.value);
|
||||
ecma_get_completion_value_value (y_num_value));
|
||||
|
||||
ECMA_FINALIZE (y_num_value);
|
||||
}
|
||||
@@ -182,7 +182,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_op_abstract_equality_compare (x,
|
||||
y_prim_value.u.value);
|
||||
ecma_get_completion_value_value (y_prim_value));
|
||||
|
||||
ECMA_FINALIZE (y_prim_value);
|
||||
}
|
||||
@@ -194,7 +194,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
||||
ecma_op_to_primitive (x, ECMA_PREFERRED_TYPE_NO),
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_op_abstract_equality_compare (x_prim_value.u.value,
|
||||
ret_value = ecma_op_abstract_equality_compare (ecma_get_completion_value_value (x_prim_value),
|
||||
y);
|
||||
|
||||
ECMA_FINALIZE (x_prim_value);
|
||||
@@ -338,21 +338,21 @@ ecma_op_abstract_relational_compare (ecma_value_t x, /**< first operand */
|
||||
px = left_first ? prim_first_converted_value : prim_second_converted_value;
|
||||
py = left_first ? prim_second_converted_value : prim_first_converted_value;
|
||||
|
||||
const bool is_px_string = ecma_is_value_string (px.u.value);
|
||||
const bool is_py_string = ecma_is_value_string (py.u.value);
|
||||
const bool is_px_string = ecma_is_value_string (ecma_get_completion_value_value (px));
|
||||
const bool is_py_string = ecma_is_value_string (ecma_get_completion_value_value (py));
|
||||
|
||||
if (!(is_px_string && is_py_string))
|
||||
{
|
||||
// 3.
|
||||
|
||||
// a.
|
||||
ECMA_TRY_CATCH(nx, ecma_op_to_number (px.u.value), ret_value);
|
||||
ECMA_TRY_CATCH(nx, ecma_op_to_number (ecma_get_completion_value_value (px)), ret_value);
|
||||
|
||||
// b.
|
||||
ECMA_TRY_CATCH(ny, ecma_op_to_number (py.u.value), ret_value);
|
||||
ECMA_TRY_CATCH(ny, ecma_op_to_number (ecma_get_completion_value_value (py)), ret_value);
|
||||
|
||||
ecma_number_t* num_x_p = (ecma_number_t*)ECMA_GET_NON_NULL_POINTER(nx.u.value.value);
|
||||
ecma_number_t* num_y_p = (ecma_number_t*)ECMA_GET_NON_NULL_POINTER(ny.u.value.value);
|
||||
ecma_number_t* num_x_p = ecma_get_number_from_completion_value (nx);
|
||||
ecma_number_t* num_y_p = ecma_get_number_from_completion_value (ny);
|
||||
|
||||
if (ecma_number_is_nan (*num_x_p)
|
||||
|| ecma_number_is_nan (*num_y_p))
|
||||
@@ -418,8 +418,8 @@ ecma_op_abstract_relational_compare (ecma_value_t x, /**< first operand */
|
||||
{ // 4.
|
||||
JERRY_ASSERT (is_px_string && is_py_string);
|
||||
|
||||
ecma_string_t *str_x_p = ECMA_GET_NON_NULL_POINTER (px.u.value.value);
|
||||
ecma_string_t *str_y_p = ECMA_GET_NON_NULL_POINTER (py.u.value.value);
|
||||
ecma_string_t *str_x_p = ecma_get_string_from_completion_value (px);
|
||||
ecma_string_t *str_y_p = ecma_get_string_from_completion_value (py);
|
||||
|
||||
bool is_px_less = ecma_compare_ecma_strings_relational (str_x_p, str_y_p);
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@ ecma_op_to_number (ecma_value_t value) /**< ecma-value */
|
||||
ecma_op_to_primitive (value, ECMA_PREFERRED_TYPE_NUMBER),
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_op_to_number (completion_to_primitive.u.value);
|
||||
ret_value = ecma_op_to_number (ecma_get_completion_value_value (completion_to_primitive));
|
||||
|
||||
ECMA_FINALIZE (completion_to_primitive);
|
||||
|
||||
@@ -330,7 +330,7 @@ ecma_op_to_string (ecma_value_t value) /**< ecma-value */
|
||||
ecma_op_to_primitive (value, ECMA_PREFERRED_TYPE_STRING),
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_op_to_string (prim_value.u.value);
|
||||
ret_value = ecma_op_to_string (ecma_get_completion_value_value (prim_value));
|
||||
|
||||
ECMA_FINALIZE (prim_value);
|
||||
|
||||
@@ -584,7 +584,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||
ecma_op_object_get (obj_p, enumerable_magic_string_p),
|
||||
ret_value);
|
||||
ECMA_TRY_CATCH (boolean_enumerable_prop_value,
|
||||
ecma_op_to_boolean (enumerable_prop_value.u.value),
|
||||
ecma_op_to_boolean (ecma_get_completion_value_value (enumerable_prop_value)),
|
||||
ret_value);
|
||||
|
||||
prop_desc.is_enumerable_defined = true;
|
||||
@@ -618,7 +618,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||
ecma_op_object_get (obj_p, configurable_magic_string_p),
|
||||
ret_value);
|
||||
ECMA_TRY_CATCH (boolean_configurable_prop_value,
|
||||
ecma_op_to_boolean (configurable_prop_value.u.value),
|
||||
ecma_op_to_boolean (ecma_get_completion_value_value (configurable_prop_value)),
|
||||
ret_value);
|
||||
|
||||
prop_desc.is_configurable_defined = true;
|
||||
@@ -654,7 +654,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||
ret_value);
|
||||
|
||||
prop_desc.is_value_defined = true;
|
||||
prop_desc.value = ecma_copy_value (value_prop_value.u.value, true);
|
||||
prop_desc.value = ecma_copy_value (ecma_get_completion_value_value (value_prop_value), true);
|
||||
|
||||
ECMA_FINALIZE (value_prop_value);
|
||||
}
|
||||
@@ -675,7 +675,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||
ecma_op_object_get (obj_p, writable_magic_string_p),
|
||||
ret_value);
|
||||
ECMA_TRY_CATCH (boolean_writable_prop_value,
|
||||
ecma_op_to_boolean (writable_prop_value.u.value),
|
||||
ecma_op_to_boolean (ecma_get_completion_value_value (writable_prop_value)),
|
||||
ret_value);
|
||||
|
||||
prop_desc.is_writable_defined = true;
|
||||
@@ -710,8 +710,8 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||
ecma_op_object_get (obj_p, get_magic_string_p),
|
||||
ret_value);
|
||||
|
||||
if (!ecma_op_is_callable (get_prop_value.u.value)
|
||||
&& !ecma_is_value_undefined (get_prop_value.u.value))
|
||||
if (!ecma_op_is_callable (ecma_get_completion_value_value (get_prop_value))
|
||||
&& !ecma_is_value_undefined (ecma_get_completion_value_value (get_prop_value)))
|
||||
{
|
||||
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||
}
|
||||
@@ -719,15 +719,15 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||
{
|
||||
prop_desc.is_get_defined = true;
|
||||
|
||||
if (ecma_is_value_undefined (get_prop_value.u.value))
|
||||
if (ecma_is_value_undefined (ecma_get_completion_value_value (get_prop_value)))
|
||||
{
|
||||
prop_desc.get_p = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
JERRY_ASSERT (ecma_is_value_object (get_prop_value.u.value));
|
||||
JERRY_ASSERT (ecma_is_value_object (ecma_get_completion_value_value (get_prop_value)));
|
||||
|
||||
ecma_object_t *get_p = ECMA_GET_NON_NULL_POINTER (get_prop_value.u.value.value);
|
||||
ecma_object_t *get_p = ecma_get_object_from_completion_value (get_prop_value);
|
||||
ecma_ref_object (get_p);
|
||||
|
||||
prop_desc.get_p = get_p;
|
||||
@@ -754,8 +754,8 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||
ecma_op_object_get (obj_p, set_magic_string_p),
|
||||
ret_value);
|
||||
|
||||
if (!ecma_op_is_callable (set_prop_value.u.value)
|
||||
&& !ecma_is_value_undefined (set_prop_value.u.value))
|
||||
if (!ecma_op_is_callable (ecma_get_completion_value_value (set_prop_value))
|
||||
&& !ecma_is_value_undefined (ecma_get_completion_value_value (set_prop_value)))
|
||||
{
|
||||
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||
}
|
||||
@@ -763,15 +763,15 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||
{
|
||||
prop_desc.is_set_defined = true;
|
||||
|
||||
if (ecma_is_value_undefined (set_prop_value.u.value))
|
||||
if (ecma_is_value_undefined (ecma_get_completion_value_value (set_prop_value)))
|
||||
{
|
||||
prop_desc.set_p = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
JERRY_ASSERT (ecma_is_value_object (set_prop_value.u.value));
|
||||
JERRY_ASSERT (ecma_is_value_object (ecma_get_completion_value_value (set_prop_value)));
|
||||
|
||||
ecma_object_t *set_p = ECMA_GET_NON_NULL_POINTER (set_prop_value.u.value.value);
|
||||
ecma_object_t *set_p = ecma_get_object_from_completion_value (set_prop_value);
|
||||
ecma_ref_object (set_p);
|
||||
|
||||
prop_desc.set_p = set_p;
|
||||
|
||||
@@ -406,13 +406,13 @@ ecma_op_function_has_instance (ecma_object_t *func_obj_p, /**< Function object *
|
||||
ecma_op_object_get (func_obj_p, prototype_magic_string_p),
|
||||
ret_value);
|
||||
|
||||
if (!ecma_is_value_object (prototype_obj_value.u.value))
|
||||
if (!ecma_is_value_object (ecma_get_completion_value_value (prototype_obj_value)))
|
||||
{
|
||||
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||
}
|
||||
else
|
||||
{
|
||||
ecma_object_t *prototype_obj_p = ECMA_GET_NON_NULL_POINTER (prototype_obj_value.u.value.value);
|
||||
ecma_object_t *prototype_obj_p = ecma_get_object_from_completion_value (prototype_obj_value);
|
||||
JERRY_ASSERT (prototype_obj_p != NULL);
|
||||
|
||||
do
|
||||
@@ -512,7 +512,7 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
|
||||
ecma_completion_value_t completion = ecma_op_to_object (this_arg_value);
|
||||
JERRY_ASSERT (ecma_is_completion_value_normal (completion));
|
||||
|
||||
this_binding = completion.u.value;
|
||||
this_binding = ecma_get_completion_value_value (completion);
|
||||
}
|
||||
|
||||
// 5.
|
||||
@@ -534,7 +534,7 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
|
||||
false);
|
||||
if (ecma_is_completion_value_return (completion))
|
||||
{
|
||||
ret_value = ecma_make_normal_completion_value (completion.u.value);
|
||||
ret_value = ecma_make_normal_completion_value (ecma_get_completion_value_value (completion));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -597,9 +597,9 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
|
||||
|
||||
// 6.
|
||||
ecma_object_t *prototype_p;
|
||||
if (ecma_is_value_object (func_obj_prototype_prop_value.u.value))
|
||||
if (ecma_is_value_object (ecma_get_completion_value_value (func_obj_prototype_prop_value)))
|
||||
{
|
||||
prototype_p = ECMA_GET_NON_NULL_POINTER (func_obj_prototype_prop_value.u.value.value);
|
||||
prototype_p = ecma_get_object_from_completion_value (func_obj_prototype_prop_value);
|
||||
ecma_ref_object (prototype_p);
|
||||
}
|
||||
else
|
||||
@@ -628,11 +628,11 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
|
||||
ecma_value_t obj_value;
|
||||
|
||||
// 9.
|
||||
if (ecma_is_value_object (call_completion.u.value))
|
||||
if (ecma_is_value_object (ecma_get_completion_value_value (call_completion)))
|
||||
{
|
||||
ecma_deref_object (obj_p);
|
||||
|
||||
obj_value = ecma_copy_value (call_completion.u.value, true);
|
||||
obj_value = ecma_copy_value (ecma_get_completion_value_value (call_completion), true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -107,7 +107,7 @@ ecma_op_get_value_object_base (ecma_reference_t ref) /**< ECMA-reference */
|
||||
|
||||
ECMA_TRY_CATCH (obj_base, ecma_op_to_object (base), ret_value);
|
||||
|
||||
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (obj_base.u.value.value);
|
||||
ecma_object_t *obj_p = ecma_get_object_from_completion_value (obj_base);
|
||||
JERRY_ASSERT (obj_p != NULL
|
||||
&& !ecma_is_lexical_environment (obj_p));
|
||||
|
||||
@@ -248,7 +248,7 @@ ecma_op_put_value_object_base (ecma_reference_t ref, /**< ECMA-reference */
|
||||
// sub_1.
|
||||
ECMA_TRY_CATCH (obj_base, ecma_op_to_object (base), ret_value);
|
||||
|
||||
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (obj_base.u.value.value);
|
||||
ecma_object_t *obj_p = ecma_get_object_from_completion_value (obj_base);
|
||||
JERRY_ASSERT (obj_p != NULL
|
||||
&& !ecma_is_lexical_environment (obj_p));
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ ecma_op_create_number_object (ecma_value_t arg) /**< argument passed to the Numb
|
||||
return conv_to_num_completion;
|
||||
}
|
||||
|
||||
ecma_number_t *prim_value_p = ECMA_GET_NON_NULL_POINTER (conv_to_num_completion.u.value.value);
|
||||
ecma_number_t *prim_value_p = ecma_get_number_from_completion_value (conv_to_num_completion);
|
||||
|
||||
#ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN
|
||||
ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_NUMBER_PROTOTYPE);
|
||||
|
||||
@@ -369,7 +369,7 @@ ecma_op_arguments_object_get_own_property (ecma_object_t *obj_p, /**< the object
|
||||
ecma_completion_value_t completion = ecma_arguments_get_mapped_arg_value (map_p, mapped_prop_p);
|
||||
|
||||
ecma_free_value (desc_p->u.named_data_property.value, false);
|
||||
desc_p->u.named_data_property.value = ecma_copy_value (completion.u.value, false);
|
||||
desc_p->u.named_data_property.value = ecma_copy_value (ecma_get_completion_value_value (completion), false);
|
||||
ecma_gc_update_may_ref_younger_object_flag_by_value (obj_p, desc_p->u.named_data_property.value);
|
||||
|
||||
ecma_free_completion_value (completion);
|
||||
|
||||
@@ -148,20 +148,10 @@ ecma_op_general_object_get (ecma_object_t *obj_p, /**< the object */
|
||||
}
|
||||
else
|
||||
{
|
||||
ecma_completion_value_t ret_value;
|
||||
|
||||
ECMA_TRY_CATCH (call_completion,
|
||||
ecma_op_function_call (getter_p,
|
||||
ecma_make_object_value (obj_p),
|
||||
NULL,
|
||||
0),
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_make_normal_completion_value (ecma_copy_value (call_completion.u.value, true));
|
||||
|
||||
ECMA_FINALIZE (call_completion);
|
||||
|
||||
return ret_value;
|
||||
return ecma_op_function_call (getter_p,
|
||||
ecma_make_object_value (obj_p),
|
||||
NULL,
|
||||
0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -592,9 +582,9 @@ ecma_op_general_object_default_value (ecma_object_t *obj_p, /**< the object */
|
||||
|
||||
ecma_completion_value_t call_completion = ecma_make_empty_completion_value ();
|
||||
|
||||
if (ecma_op_is_callable (function_value_get_completion.u.value))
|
||||
if (ecma_op_is_callable (ecma_get_completion_value_value (function_value_get_completion)))
|
||||
{
|
||||
ecma_object_t *func_obj_p = ECMA_GET_NON_NULL_POINTER (function_value_get_completion.u.value.value);
|
||||
ecma_object_t *func_obj_p = ecma_get_object_from_completion_value (function_value_get_completion);
|
||||
|
||||
call_completion = ecma_op_function_call (func_obj_p,
|
||||
ecma_make_object_value (obj_p),
|
||||
@@ -609,7 +599,7 @@ ecma_op_general_object_default_value (ecma_object_t *obj_p, /**< the object */
|
||||
}
|
||||
|
||||
if (!ecma_is_completion_value_empty (call_completion)
|
||||
&& !ecma_is_value_object (call_completion.u.value))
|
||||
&& !ecma_is_value_object (ecma_get_completion_value_value (call_completion)))
|
||||
{
|
||||
return call_completion;
|
||||
}
|
||||
|
||||
@@ -67,8 +67,8 @@ ecma_op_create_string_object (ecma_value_t *arguments_list_p, /**< list of argum
|
||||
{
|
||||
JERRY_ASSERT (ecma_is_completion_value_normal (to_str_arg_value));
|
||||
|
||||
JERRY_ASSERT (ecma_is_value_string (to_str_arg_value.u.value));
|
||||
prim_prop_str_value_p = ECMA_GET_NON_NULL_POINTER (to_str_arg_value.u.value.value);
|
||||
JERRY_ASSERT (ecma_is_value_string (ecma_get_completion_value_value (to_str_arg_value)));
|
||||
prim_prop_str_value_p = ecma_get_string_from_completion_value (to_str_arg_value);
|
||||
|
||||
int32_t string_len = ecma_string_get_length (prim_prop_str_value_p);
|
||||
JERRY_ASSERT (string_len >= 0);
|
||||
|
||||
Reference in New Issue
Block a user