Representing ecma_value_t as integer instead of structure with bit-fields, adding corresponding field accessors.

This commit is contained in:
Ruben Ayrapetyan
2014-11-27 17:34:03 +03:00
parent 815309c7e9
commit 0d870a1e74
19 changed files with 200 additions and 223 deletions
+3 -5
View File
@@ -81,7 +81,7 @@ ecma_op_create_array_object (ecma_value_t *arguments_list_p, /**< list of argume
&& arguments_list_len == 1
&& ecma_is_value_number (arguments_list_p[0]))
{
ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (arguments_list_p[0].value);
ecma_number_t *num_p = ecma_get_number_from_value (arguments_list_p[0]);
uint32_t num_uint32 = ecma_number_to_uint32 (*num_p);
if (*num_p != ecma_uint32_to_number (num_uint32))
{
@@ -185,9 +185,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o
// 2.
ecma_value_t old_len_value = len_prop_p->u.named_data_property.value;
JERRY_ASSERT (ecma_is_value_number (old_len_value));
ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (old_len_value.value);
ecma_number_t *num_p = ecma_get_number_from_value (old_len_value);
uint32_t old_len_uint32 = ecma_number_to_uint32 (*num_p);
// 3.
@@ -317,7 +315,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o
{
JERRY_ASSERT (ecma_is_value_number (new_len_property_desc.value));
ecma_number_t *new_len_num_p = ECMA_GET_NON_NULL_POINTER (new_len_property_desc.value.value);
ecma_number_t *new_len_num_p = ecma_get_number_from_value (new_len_property_desc.value);
// 1.
*new_len_num_p = ecma_uint32_to_number (old_len_uint32 + 1);
+2 -3
View File
@@ -48,9 +48,8 @@ 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 = ecma_get_completion_value_value (conv_to_boolean_completion).value;
JERRY_ASSERT (bool_value == ECMA_SIMPLE_VALUE_TRUE || bool_value == ECMA_SIMPLE_VALUE_FALSE);
ecma_simple_value_t bool_value = (ecma_is_value_true (ecma_get_completion_value_value (conv_to_boolean_completion)) ?
ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
#ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_BOOLEAN_BUILTIN
ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE);
+12 -12
View File
@@ -73,8 +73,8 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
}
else if (is_x_number)
{ // c.
ecma_number_t x_num = *(ecma_number_t*)(ECMA_GET_NON_NULL_POINTER(x.value));
ecma_number_t y_num = *(ecma_number_t*)(ECMA_GET_NON_NULL_POINTER(y.value));
ecma_number_t x_num = *ecma_get_number_from_value (x);
ecma_number_t y_num = *ecma_get_number_from_value (y);
bool is_equal;
@@ -98,8 +98,8 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
}
else if (is_x_string)
{ // d.
ecma_string_t* x_str_p = ECMA_GET_NON_NULL_POINTER(x.value);
ecma_string_t* y_str_p = ECMA_GET_NON_NULL_POINTER(y.value);
ecma_string_t* x_str_p = ecma_get_string_from_value (x);
ecma_string_t* y_str_p = ecma_get_string_from_value (y);
bool is_equal = ecma_compare_ecma_strings (x_str_p, y_str_p);
@@ -107,7 +107,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
}
else if (is_x_boolean)
{ // e.
bool is_equal = (x.value == y.value);
bool is_equal = (ecma_is_value_true (x) == ecma_is_value_true (y));
ret_value = ecma_make_simple_completion_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
}
@@ -115,7 +115,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
{ // f.
JERRY_ASSERT(is_x_object);
bool is_equal = (x.value == y.value);
bool is_equal = (ecma_get_object_from_value (x) == ecma_get_object_from_value (y));
ret_value = ecma_make_simple_completion_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
}
@@ -267,8 +267,8 @@ ecma_op_strict_equality_compare (ecma_value_t x, /**< first operand */
// d. If x is +0 and y is -0, return true.
// e. If x is -0 and y is +0, return true.
ecma_number_t x_num = *(ecma_number_t*) (ECMA_GET_NON_NULL_POINTER (x.value));
ecma_number_t y_num = *(ecma_number_t*) (ECMA_GET_NON_NULL_POINTER (y.value));
ecma_number_t x_num = *ecma_get_number_from_value (x);
ecma_number_t y_num = *ecma_get_number_from_value (y);
if (ecma_number_is_nan (x_num)
|| ecma_number_is_nan (y_num))
@@ -291,8 +291,8 @@ ecma_op_strict_equality_compare (ecma_value_t x, /**< first operand */
// (same length and same characters in corresponding positions); otherwise, return false.
if (is_x_string)
{
ecma_string_t* x_str_p = ECMA_GET_NON_NULL_POINTER (x.value);
ecma_string_t* y_str_p = ECMA_GET_NON_NULL_POINTER (y.value);
ecma_string_t* x_str_p = ecma_get_string_from_value (x);
ecma_string_t* y_str_p = ecma_get_string_from_value (y);
return ecma_compare_ecma_strings (x_str_p, y_str_p);
}
@@ -300,13 +300,13 @@ ecma_op_strict_equality_compare (ecma_value_t x, /**< first operand */
// 6. If Type (x) is Boolean, return true if x and y are both true or both false; otherwise, return false.
if (is_x_boolean)
{
return (x.value == y.value);
return (ecma_is_value_true (x) == ecma_is_value_true (y));
}
// 7. Return true if x and y refer to the same object. Otherwise, return false.
JERRY_ASSERT (is_x_object);
return (ECMA_GET_NON_NULL_POINTER (x.value) == ECMA_GET_NON_NULL_POINTER (y.value));
return (ecma_get_object_from_value (x) == ecma_get_object_from_value (y));
} /* ecma_op_strict_equality_compare */
/**
+14 -13
View File
@@ -111,8 +111,8 @@ ecma_op_same_value (ecma_value_t x, /**< ecma-value */
if (is_x_number)
{
ecma_number_t *x_num_p = (ecma_number_t*)ECMA_GET_NON_NULL_POINTER(x.value);
ecma_number_t *y_num_p = (ecma_number_t*)ECMA_GET_NON_NULL_POINTER(y.value);
ecma_number_t *x_num_p = ecma_get_number_from_value (x);
ecma_number_t *y_num_p = ecma_get_number_from_value (y);
if (ecma_number_is_nan (*x_num_p)
&& ecma_number_is_nan (*y_num_p))
@@ -131,8 +131,8 @@ ecma_op_same_value (ecma_value_t x, /**< ecma-value */
if (is_x_string)
{
ecma_string_t* x_str_p = ECMA_GET_NON_NULL_POINTER(x.value);
ecma_string_t* y_str_p = ECMA_GET_NON_NULL_POINTER(y.value);
ecma_string_t* x_str_p = ecma_get_string_from_value (x);
ecma_string_t* y_str_p = ecma_get_string_from_value (y);
return ecma_compare_ecma_strings (x_str_p, y_str_p);
}
@@ -144,7 +144,7 @@ ecma_op_same_value (ecma_value_t x, /**< ecma-value */
JERRY_ASSERT(is_x_object);
return (ECMA_GET_NON_NULL_POINTER(x.value) == ECMA_GET_NON_NULL_POINTER(y.value));
return (ecma_get_object_from_value (x) == ecma_get_object_from_value (y));
} /* ecma_op_same_value */
/**
@@ -164,7 +164,7 @@ ecma_op_to_primitive (ecma_value_t value, /**< ecma-value */
if (ecma_is_value_object (value))
{
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (value.value);
ecma_object_t *obj_p = ecma_get_object_from_value (value);
return ecma_op_object_default_value (obj_p, preferred_type);
}
@@ -193,7 +193,8 @@ ecma_op_to_boolean (ecma_value_t value) /**< ecma-value */
if (ecma_is_value_boolean (value))
{
ret_value = value.value;
ret_value = (ecma_is_value_true (value) ?
ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
}
else if (ecma_is_value_undefined (value)
|| ecma_is_value_null (value))
@@ -202,7 +203,7 @@ ecma_op_to_boolean (ecma_value_t value) /**< ecma-value */
}
else if (ecma_is_value_number (value))
{
ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER(value.value);
ecma_number_t *num_p = ecma_get_number_from_value (value);
if (ecma_number_is_nan (*num_p)
|| ecma_number_is_zero (*num_p))
@@ -216,7 +217,7 @@ ecma_op_to_boolean (ecma_value_t value) /**< ecma-value */
}
else if (ecma_is_value_string (value))
{
ecma_string_t *str_p = ECMA_GET_NON_NULL_POINTER(value.value);
ecma_string_t *str_p = ecma_get_string_from_value (value);
if (ecma_string_get_length (str_p) == 0)
{
@@ -257,7 +258,7 @@ ecma_op_to_number (ecma_value_t value) /**< ecma-value */
}
else if (ecma_is_value_string (value))
{
ecma_string_t *str_p = ECMA_GET_NON_NULL_POINTER (value.value);
ecma_string_t *str_p = ecma_get_string_from_value (value);
ecma_number_t *num_p = ecma_alloc_number ();
*num_p = ecma_string_to_number (str_p);
@@ -342,12 +343,12 @@ ecma_op_to_string (ecma_value_t value) /**< ecma-value */
if (ecma_is_value_string (value))
{
res_p = ECMA_GET_NON_NULL_POINTER (value.value);
res_p = ecma_get_string_from_value (value);
res_p = ecma_copy_or_ref_ecma_string (res_p);
}
else if (ecma_is_value_number (value))
{
ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (value.value);
ecma_number_t *num_p = ecma_get_number_from_value (value);
res_p = ecma_new_ecma_string_from_number (*num_p);
}
else if (ecma_is_value_undefined (value))
@@ -570,7 +571,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
}
else
{
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (obj_value.value);
ecma_object_t *obj_p = ecma_get_object_from_value (obj_value);
// 2.
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
+4 -6
View File
@@ -94,7 +94,7 @@ ecma_op_is_callable (ecma_value_t value) /**< ecma-value */
return false;
}
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER(value.value);
ecma_object_t *obj_p = ecma_get_object_from_value (value);
JERRY_ASSERT(obj_p != NULL);
JERRY_ASSERT(!ecma_is_lexical_environment (obj_p));
@@ -118,7 +118,7 @@ ecma_is_constructor (ecma_value_t value) /**< ecma-value */
return false;
}
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER(value.value);
ecma_object_t *obj_p = ecma_get_object_from_value (value);
JERRY_ASSERT(obj_p != NULL);
JERRY_ASSERT(!ecma_is_lexical_environment (obj_p));
@@ -338,8 +338,7 @@ ecma_function_call_setup_args_variables (ecma_object_t *func_obj_p, /**< Functio
JERRY_ASSERT (is_moved);
ecma_value_t formal_parameter_name_value = *formal_params_iterator.current_value_p;
JERRY_ASSERT (ecma_is_value_string (formal_parameter_name_value));
ecma_string_t *formal_parameter_name_string_p = ECMA_GET_NON_NULL_POINTER (formal_parameter_name_value.value);
ecma_string_t *formal_parameter_name_string_p = ecma_get_string_from_value (formal_parameter_name_value);
bool arg_already_declared = ecma_op_has_binding (env_p, formal_parameter_name_string_p);
if (!arg_already_declared)
@@ -395,8 +394,7 @@ ecma_op_function_has_instance (ecma_object_t *func_obj_p, /**< Function object *
return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_FALSE);
}
ecma_object_t* v_obj_p = ECMA_GET_NON_NULL_POINTER (value.value);
JERRY_ASSERT (v_obj_p != NULL);
ecma_object_t* v_obj_p = ecma_get_object_from_value (value);
ecma_string_t *prototype_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_PROTOTYPE);
+4 -4
View File
@@ -83,7 +83,7 @@ ecma_op_get_value_object_base (ecma_reference_t ref) /**< ECMA-reference */
|| ecma_is_value_number (base)
|| ecma_is_value_string (base));
const bool has_object_base = (ecma_is_value_object (base)
&& !(ecma_is_lexical_environment (ECMA_GET_NON_NULL_POINTER(base.value))));
&& !(ecma_is_lexical_environment (ecma_get_object_from_value (base))));
const bool is_property_reference = has_primitive_base || has_object_base;
JERRY_ASSERT (!is_unresolvable_reference);
@@ -94,7 +94,7 @@ ecma_op_get_value_object_base (ecma_reference_t ref) /**< ECMA-reference */
{
// 4.b case 1
ecma_object_t *obj_p = ECMA_GET_POINTER(base.value);
ecma_object_t *obj_p = ecma_get_object_from_value (base);
JERRY_ASSERT(obj_p != NULL
&& !ecma_is_lexical_environment (obj_p));
@@ -210,7 +210,7 @@ ecma_op_put_value_object_base (ecma_reference_t ref, /**< ECMA-reference */
|| ecma_is_value_number (base)
|| ecma_is_value_string (base));
const bool has_object_base = (ecma_is_value_object (base)
&& !(ecma_is_lexical_environment (ECMA_GET_NON_NULL_POINTER(base.value))));
&& !(ecma_is_lexical_environment (ecma_get_object_from_value (base))));
const bool is_property_reference = has_primitive_base || has_object_base;
JERRY_ASSERT (!is_unresolvable_reference);
@@ -221,7 +221,7 @@ ecma_op_put_value_object_base (ecma_reference_t ref, /**< ECMA-reference */
{
// 4.b case 1
ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER(base.value);
ecma_object_t *obj_p = ecma_get_object_from_value (base);
JERRY_ASSERT (obj_p != NULL
&& !ecma_is_lexical_environment (obj_p));
@@ -142,7 +142,7 @@ ecma_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function */
JERRY_ASSERT (param_index < formal_params_number);
JERRY_ASSERT (ecma_is_value_string (*formal_params_iter_p->current_value_p));
formal_params[param_index] = ECMA_GET_NON_NULL_POINTER (formal_params_iter_p->current_value_p->value);
formal_params[param_index] = ecma_get_string_from_value (*formal_params_iter_p->current_value_p);
}
JERRY_ASSERT (param_index == formal_params_number);
@@ -285,8 +285,7 @@ ecma_arguments_get_mapped_arg_value (ecma_object_t *map_p, /**< [[ParametersMap]
ecma_value_t arg_name_prop_value = arg_name_prop_p->u.named_data_property.value;
JERRY_ASSERT (ecma_is_value_string (arg_name_prop_value));
ecma_string_t *arg_name_p = ECMA_GET_NON_NULL_POINTER (arg_name_prop_value.value);
ecma_string_t *arg_name_p = ecma_get_string_from_value (arg_name_prop_value);
ecma_completion_value_t completion = ecma_op_get_binding_value (lex_env_p,
arg_name_p,