Introducing ecma_get_[type]_from_value, ecma_get_[type]_from_completion_value and ecma_get_completion_value_value interfaces.

This commit is contained in:
Ruben Ayrapetyan
2014-11-27 14:19:53 +03:00
parent 22e1941050
commit 815309c7e9
35 changed files with 370 additions and 240 deletions
+2 -2
View File
@@ -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);
+1 -1
View File
@@ -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);
+14 -14
View File
@@ -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);
+16 -16
View File
@@ -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;
+8 -8
View File
@@ -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
{
+2 -2
View File
@@ -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));
+1 -1
View File
@@ -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);
+7 -17
View File
@@ -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;
}
+2 -2
View File
@@ -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);