diff --git a/src/libcoreint/opcodes-ecma-arithmetics.c b/src/libcoreint/opcodes-ecma-arithmetics.c index 63b9079e1..9034fb619 100644 --- a/src/libcoreint/opcodes-ecma-arithmetics.c +++ b/src/libcoreint/opcodes-ecma-arithmetics.c @@ -125,8 +125,8 @@ opfunc_addition (opcode_t opdata, /**< operation data */ ECMA_TRY_CATCH (prim_left_value, ecma_op_to_primitive (left_value.u.value, ECMA_PREFERRED_TYPE_NO), ret_value); ECMA_TRY_CATCH (prim_right_value, ecma_op_to_primitive (right_value.u.value, ECMA_PREFERRED_TYPE_NO), ret_value); - if (prim_left_value.u.value.value_type == ECMA_TYPE_STRING - || prim_right_value.u.value.value_type == ECMA_TYPE_STRING) + if (ecma_is_value_string (prim_left_value.u.value) + || ecma_is_value_string (prim_right_value.u.value)) { ECMA_TRY_CATCH (str_left_value, ecma_op_to_string (prim_left_value.u.value), ret_value); ECMA_TRY_CATCH (str_right_value, ecma_op_to_string (prim_right_value.u.value), ret_value); diff --git a/src/libcoreint/opcodes-ecma-relational.c b/src/libcoreint/opcodes-ecma-relational.c index a30cdbd8e..72c5b4395 100644 --- a/src/libcoreint/opcodes-ecma-relational.c +++ b/src/libcoreint/opcodes-ecma-relational.c @@ -253,7 +253,7 @@ opfunc_instanceof (opcode_t opdata __unused, /**< operation data */ ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); - if (right_value.u.value.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (right_value.u.value)) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } @@ -300,7 +300,7 @@ opfunc_in (opcode_t opdata __unused, /**< operation data */ ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); - if (right_value.u.value.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (right_value.u.value)) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } diff --git a/src/libcoreint/opcodes-helpers-variables.c b/src/libcoreint/opcodes-helpers-variables.c index 53f240794..085374293 100644 --- a/src/libcoreint/opcodes-helpers-variables.c +++ b/src/libcoreint/opcodes-helpers-variables.c @@ -32,7 +32,7 @@ do_strict_eval_arguments_check (ecma_reference_t ref) /**< ECMA-reference */ if (ref.is_strict) { - if (ref.base.value_type == ECMA_TYPE_OBJECT) + if (ecma_is_value_object (ref.base)) { ecma_object_t *obj_p = ECMA_GET_POINTER (ref.base.value); diff --git a/src/libcoreint/opcodes-native-call.c b/src/libcoreint/opcodes-native-call.c index ddcd1c0d0..9de8d1aca 100644 --- a/src/libcoreint/opcodes-native-call.c +++ b/src/libcoreint/opcodes-native-call.c @@ -62,7 +62,7 @@ opfunc_native_call (opcode_t opdata, /**< operation data */ case OPCODE_NATIVE_CALL_LED_TOGGLE: { JERRY_ASSERT (args_number == 1); - JERRY_ASSERT (arg_values[0].value_type == ECMA_TYPE_NUMBER); + JERRY_ASSERT (ecma_is_value_number (arg_values[0])); ecma_number_t* num_p = (ecma_number_t*) ECMA_GET_NON_NULL_POINTER (arg_values[0].value); uint32_t int_num = ecma_number_to_uint32 (*num_p); led_toggle (int_num); @@ -73,7 +73,7 @@ opfunc_native_call (opcode_t opdata, /**< operation data */ case OPCODE_NATIVE_CALL_LED_ON: { JERRY_ASSERT (args_number == 1); - JERRY_ASSERT (arg_values[0].value_type == ECMA_TYPE_NUMBER); + JERRY_ASSERT (ecma_is_value_number (arg_values[0])); ecma_number_t* num_p = (ecma_number_t*) ECMA_GET_NON_NULL_POINTER (arg_values[0].value); uint32_t int_num = ecma_number_to_uint32 (*num_p); led_on (int_num); @@ -84,7 +84,7 @@ opfunc_native_call (opcode_t opdata, /**< operation data */ case OPCODE_NATIVE_CALL_LED_OFF: { JERRY_ASSERT (args_number == 1); - JERRY_ASSERT (arg_values[0].value_type == ECMA_TYPE_NUMBER); + JERRY_ASSERT (ecma_is_value_number (arg_values[0])); ecma_number_t* num_p = (ecma_number_t*) ECMA_GET_NON_NULL_POINTER (arg_values[0].value); uint32_t int_num = ecma_number_to_uint32 (*num_p); led_off (int_num); @@ -95,7 +95,7 @@ opfunc_native_call (opcode_t opdata, /**< operation data */ case OPCODE_NATIVE_CALL_LED_ONCE: { JERRY_ASSERT (args_number == 1); - JERRY_ASSERT (arg_values[0].value_type == ECMA_TYPE_NUMBER); + JERRY_ASSERT (ecma_is_value_number (arg_values[0])); ecma_number_t* num_p = (ecma_number_t*) ECMA_GET_NON_NULL_POINTER (arg_values[0].value); uint32_t int_num = ecma_number_to_uint32 (*num_p); led_blink_once (int_num); @@ -106,7 +106,7 @@ opfunc_native_call (opcode_t opdata, /**< operation data */ case OPCODE_NATIVE_CALL_WAIT: { JERRY_ASSERT (args_number == 1); - JERRY_ASSERT (arg_values[0].value_type == ECMA_TYPE_NUMBER); + JERRY_ASSERT (ecma_is_value_number (arg_values[0])); ecma_number_t* num_p = (ecma_number_t*) ECMA_GET_NON_NULL_POINTER (arg_values[0].value); uint32_t int_num = ecma_number_to_uint32 (*num_p); wait_ms (int_num); diff --git a/src/libcoreint/opcodes.c b/src/libcoreint/opcodes.c index 849db24b6..9b1ab6a2c 100644 --- a/src/libcoreint/opcodes.c +++ b/src/libcoreint/opcodes.c @@ -898,7 +898,7 @@ opfunc_obj_decl (opcode_t opdata, /**< operation data */ } else if (type == OPCODE_META_TYPE_VARG_PROP_GETTER) { - JERRY_ASSERT (value_for_prop_desc.u.value.value_type == ECMA_TYPE_OBJECT); + JERRY_ASSERT (ecma_is_value_object (value_for_prop_desc.u.value)); prop_desc.is_get_defined = true; prop_desc.get_p = ECMA_GET_NON_NULL_POINTER (value_for_prop_desc.u.value.value); @@ -911,7 +911,7 @@ opfunc_obj_decl (opcode_t opdata, /**< operation data */ } else { - JERRY_ASSERT (value_for_prop_desc.u.value.value_type == ECMA_TYPE_OBJECT); + JERRY_ASSERT (ecma_is_value_object (value_for_prop_desc.u.value)); prop_desc.is_set_defined = true; prop_desc.set_p = ECMA_GET_NON_NULL_POINTER (value_for_prop_desc.u.value.value); @@ -1466,7 +1466,7 @@ opfunc_delete_var (opcode_t opdata, /**< operation data */ } else { - JERRY_ASSERT (ref.base.value_type == ECMA_TYPE_OBJECT); + JERRY_ASSERT (ecma_is_value_object (ref.base)); ecma_object_t *bindings_p = ECMA_GET_NON_NULL_POINTER (ref.base.value); JERRY_ASSERT (ecma_is_lexical_environment (bindings_p)); @@ -1514,7 +1514,7 @@ opfunc_delete_prop (opcode_t opdata, /**< operation data */ ECMA_TRY_CATCH (check_coercible_ret, ecma_op_check_object_coercible (base_value.u.value), ret_value); ECMA_TRY_CATCH (str_name_value, ecma_op_to_string (name_value.u.value), ret_value); - JERRY_ASSERT (str_name_value.u.value.value_type == ECMA_TYPE_STRING); + JERRY_ASSERT (ecma_is_value_string (str_name_value.u.value)); ecma_string_t *name_string_p = ECMA_GET_NON_NULL_POINTER (str_name_value.u.value.value); if (ecma_is_value_undefined (base_value.u.value)) @@ -1533,7 +1533,7 @@ opfunc_delete_prop (opcode_t opdata, /**< operation data */ { ECMA_TRY_CATCH (obj_value, ecma_op_to_object (base_value.u.value), ret_value); - JERRY_ASSERT (obj_value.u.value.value_type == ECMA_TYPE_OBJECT); + JERRY_ASSERT (ecma_is_value_object (obj_value.u.value)); ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (obj_value.u.value.value); JERRY_ASSERT (!ecma_is_lexical_environment (obj_p)); diff --git a/src/libecmabuiltins/ecma-builtin-array.c b/src/libecmabuiltins/ecma-builtin-array.c index c8e8fd45a..31d8e8dad 100644 --- a/src/libecmabuiltins/ecma-builtin-array.c +++ b/src/libecmabuiltins/ecma-builtin-array.c @@ -59,7 +59,7 @@ ecma_builtin_array_object_is_array (ecma_value_t this_arg __unused, /**< 'this' { ecma_simple_value_t is_array = ECMA_SIMPLE_VALUE_FALSE; - if (arg.value_type == ECMA_TYPE_OBJECT) + if (ecma_is_value_object (arg)) { ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (arg.value); diff --git a/src/libecmabuiltins/ecma-builtin-boolean-prototype.c b/src/libecmabuiltins/ecma-builtin-boolean-prototype.c index d4e082aa2..445537467 100644 --- a/src/libecmabuiltins/ecma-builtin-boolean-prototype.c +++ b/src/libecmabuiltins/ecma-builtin-boolean-prototype.c @@ -98,7 +98,7 @@ ecma_builtin_boolean_prototype_object_value_of (ecma_value_t this) /**< this arg { return ecma_make_normal_completion_value (this); } - else if (this.value_type == ECMA_TYPE_OBJECT) + else if (ecma_is_value_object (this)) { ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (this.value); diff --git a/src/libecmabuiltins/ecma-builtin-error-prototype.c b/src/libecmabuiltins/ecma-builtin-error-prototype.c index 87f5696e3..80db82d24 100644 --- a/src/libecmabuiltins/ecma-builtin-error-prototype.c +++ b/src/libecmabuiltins/ecma-builtin-error-prototype.c @@ -59,7 +59,7 @@ ecma_builtin_error_prototype_object_to_string (ecma_value_t this) /**< this argu ecma_completion_value_t ret_value; // 2. - if (this.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (this)) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } @@ -116,8 +116,8 @@ ecma_builtin_error_prototype_object_to_string (ecma_value_t this) /**< this argu } else { - JERRY_ASSERT (name_to_str_completion.u.value.value_type == ECMA_TYPE_STRING); - JERRY_ASSERT (msg_to_str_completion.u.value.value_type == ECMA_TYPE_STRING); + JERRY_ASSERT (ecma_is_value_string (name_to_str_completion.u.value)); + JERRY_ASSERT (ecma_is_value_string (msg_to_str_completion.u.value)); ecma_string_t *name_string_p = ECMA_GET_NON_NULL_POINTER (name_to_str_completion.u.value.value); ecma_string_t *msg_string_p = ECMA_GET_NON_NULL_POINTER (msg_to_str_completion.u.value.value); diff --git a/src/libecmabuiltins/ecma-builtin-number-prototype.c b/src/libecmabuiltins/ecma-builtin-number-prototype.c index aeebd3837..bc3e22c0d 100644 --- a/src/libecmabuiltins/ecma-builtin-number-prototype.c +++ b/src/libecmabuiltins/ecma-builtin-number-prototype.c @@ -60,13 +60,13 @@ ecma_builtin_number_prototype_object_to_string (ecma_value_t this, /**< this arg { ecma_number_t this_arg_number; - if (this.value_type == ECMA_TYPE_NUMBER) + if (ecma_is_value_number (this)) { ecma_number_t *this_arg_number_p = ECMA_GET_NON_NULL_POINTER (this.value); this_arg_number = *this_arg_number_p; } - else if (this.value_type == ECMA_TYPE_OBJECT) + else if (ecma_is_value_object (this)) { ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (this.value); @@ -128,11 +128,11 @@ ecma_builtin_number_prototype_object_to_locale_string (ecma_value_t this) /**< t static ecma_completion_value_t ecma_builtin_number_prototype_object_value_of (ecma_value_t this) /**< this argument */ { - if (this.value_type == ECMA_TYPE_NUMBER) + if (ecma_is_value_number (this)) { return ecma_make_normal_completion_value (ecma_copy_value (this, true)); } - else if (this.value_type == ECMA_TYPE_OBJECT) + else if (ecma_is_value_object (this)) { ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (this.value); diff --git a/src/libecmabuiltins/ecma-builtin-object-prototype.c b/src/libecmabuiltins/ecma-builtin-object-prototype.c index 786734a3b..83a4cc7ac 100644 --- a/src/libecmabuiltins/ecma-builtin-object-prototype.c +++ b/src/libecmabuiltins/ecma-builtin-object-prototype.c @@ -73,7 +73,7 @@ ecma_builtin_object_prototype_object_to_string (ecma_value_t this) /**< this arg return obj_this; } - JERRY_ASSERT (obj_this.u.value.value_type == ECMA_TYPE_OBJECT); + JERRY_ASSERT (ecma_is_value_object (obj_this.u.value)); ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (obj_this.u.value.value); diff --git a/src/libecmabuiltins/ecma-builtin-object.c b/src/libecmabuiltins/ecma-builtin-object.c index fd9e14cc3..f2b4a2afa 100644 --- a/src/libecmabuiltins/ecma-builtin-object.c +++ b/src/libecmabuiltins/ecma-builtin-object.c @@ -313,7 +313,7 @@ ecma_builtin_object_object_define_property (ecma_value_t this_arg __unused, /**< { ecma_completion_value_t ret_value; - if (arg1.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (arg1)) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } diff --git a/src/libecmabuiltins/ecma-builtin-string-prototype.c b/src/libecmabuiltins/ecma-builtin-string-prototype.c index 98d063cd7..2dfe37685 100644 --- a/src/libecmabuiltins/ecma-builtin-string-prototype.c +++ b/src/libecmabuiltins/ecma-builtin-string-prototype.c @@ -56,11 +56,11 @@ static ecma_completion_value_t ecma_builtin_string_prototype_object_to_string (ecma_value_t this) /**< this argument */ { - if (this.value_type == ECMA_TYPE_STRING) + if (ecma_is_value_string (this)) { return ecma_make_normal_completion_value (ecma_copy_value (this, true)); } - else if (this.value_type == ECMA_TYPE_OBJECT) + else if (ecma_is_value_object (this)) { ecma_object_t *obj_p = ECMA_GET_NON_NULL_POINTER (this.value); diff --git a/src/libecmabuiltins/ecma-builtin-string.c b/src/libecmabuiltins/ecma-builtin-string.c index 239088593..e9262e9a7 100644 --- a/src/libecmabuiltins/ecma-builtin-string.c +++ b/src/libecmabuiltins/ecma-builtin-string.c @@ -74,7 +74,7 @@ ecma_builtin_string_object_from_char_code (ecma_value_t this_arg __unused, /**< ecma_op_to_number (args[arg_index]), ret_value); - JERRY_ASSERT (arg_num_value.u.value.value_type == ECMA_TYPE_NUMBER); + JERRY_ASSERT (ecma_is_value_number (arg_num_value.u.value)); ecma_number_t *arg_num_p = ECMA_GET_NON_NULL_POINTER (arg_num_value.u.value.value); uint32_t uint32_char_code = ecma_number_to_uint32 (*arg_num_p); diff --git a/src/libecmaobjects/ecma-gc.c b/src/libecmaobjects/ecma-gc.c index e44784ced..416c65058 100644 --- a/src/libecmaobjects/ecma-gc.c +++ b/src/libecmaobjects/ecma-gc.c @@ -238,7 +238,7 @@ void ecma_gc_update_may_ref_younger_object_flag_by_value (ecma_object_t *obj_p, /**< object */ ecma_value_t value) /**< value */ { - if (value.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (value)) { return; } @@ -331,7 +331,7 @@ ecma_gc_mark (ecma_object_t *object_p, /**< start object */ { ecma_value_t value = property_p->u.named_data_property.value; - if (value.value_type == ECMA_TYPE_OBJECT) + if (ecma_is_value_object (value)) { ecma_object_t *value_obj_p = ECMA_GET_NON_NULL_POINTER(value.value); diff --git a/src/libecmaobjects/ecma-helpers-value.c b/src/libecmaobjects/ecma-helpers-value.c index 3285e9612..71fd6fad4 100644 --- a/src/libecmaobjects/ecma-helpers-value.c +++ b/src/libecmaobjects/ecma-helpers-value.c @@ -92,6 +92,42 @@ ecma_is_value_true (ecma_value_t value) /**< ecma-value */ return (value.value_type == ECMA_TYPE_SIMPLE && value.value == ECMA_SIMPLE_VALUE_TRUE); } /* ecma_is_value_true */ +/** + * Check if the value is ecma-number. + * + * @return true - if the value contains ecma-number value, + * false - otherwise. + */ +bool +ecma_is_value_number (ecma_value_t value) /**< ecma-value */ +{ + return (value.value_type == ECMA_TYPE_NUMBER); +} /* ecma_is_value_number */ + +/** + * Check if the value is ecma-string. + * + * @return true - if the value contains ecma-string value, + * false - otherwise. + */ +bool +ecma_is_value_string (ecma_value_t value) /**< ecma-value */ +{ + return (value.value_type == ECMA_TYPE_STRING); +} /* ecma_is_value_string */ + +/** + * Check if the value is object. + * + * @return true - if the value contains object value, + * false - otherwise. + */ +bool +ecma_is_value_object (ecma_value_t value) /**< ecma-value */ +{ + return (value.value_type == ECMA_TYPE_OBJECT); +} /* ecma_is_value_object */ + /** * Simple value constructor */ diff --git a/src/libecmaobjects/ecma-helpers.h b/src/libecmaobjects/ecma-helpers.h index 68dcab5f7..464381b32 100644 --- a/src/libecmaobjects/ecma-helpers.h +++ b/src/libecmaobjects/ecma-helpers.h @@ -67,6 +67,10 @@ extern bool ecma_is_value_null (ecma_value_t value); extern bool ecma_is_value_boolean (ecma_value_t value); extern bool ecma_is_value_true (ecma_value_t value); +extern bool ecma_is_value_number (ecma_value_t value); +extern bool ecma_is_value_string (ecma_value_t value); +extern bool ecma_is_value_object (ecma_value_t value); + extern ecma_value_t ecma_make_simple_value (ecma_simple_value_t value); extern ecma_value_t ecma_make_number_value (ecma_number_t* num_p); extern ecma_value_t ecma_make_string_value (ecma_string_t* ecma_string_p); diff --git a/src/libecmaoperations/ecma-array-object.c b/src/libecmaoperations/ecma-array-object.c index d1f803da9..e978f2f4b 100644 --- a/src/libecmaoperations/ecma-array-object.c +++ b/src/libecmaoperations/ecma-array-object.c @@ -79,7 +79,7 @@ ecma_op_create_array_object (ecma_value_t *arguments_list_p, /**< list of argume if (is_treat_single_arg_as_length && arguments_list_len == 1 - && arguments_list_p[0].value_type == ECMA_TYPE_NUMBER) + && ecma_is_value_number (arguments_list_p[0])) { ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (arguments_list_p[0].value); uint32_t num_uint32 = ecma_number_to_uint32 (*num_p); @@ -185,7 +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 (old_len_value.value_type == ECMA_TYPE_NUMBER); + JERRY_ASSERT (ecma_is_value_number (old_len_value)); ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (old_len_value.value); uint32_t old_len_uint32 = ecma_number_to_uint32 (*num_p); @@ -215,7 +215,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o } JERRY_ASSERT (ecma_is_completion_value_normal (completion) - && completion.u.value.value_type == ECMA_TYPE_NUMBER); + && ecma_is_value_number (completion.u.value)); new_len_num = *(ecma_number_t*) ECMA_GET_NON_NULL_POINTER (completion.u.value.value); @@ -315,7 +315,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o // iii if (ecma_is_completion_value_normal_false (delete_succeeded)) { - JERRY_ASSERT (new_len_property_desc.value.value_type == ECMA_TYPE_NUMBER); + 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); diff --git a/src/libecmaoperations/ecma-comparison.c b/src/libecmaoperations/ecma-comparison.c index 627fc452f..e32aa8e53 100644 --- a/src/libecmaoperations/ecma-comparison.c +++ b/src/libecmaoperations/ecma-comparison.c @@ -41,16 +41,16 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */ const bool is_x_undefined = ecma_is_value_undefined (x); const bool is_x_null = ecma_is_value_null (x); const bool is_x_boolean = ecma_is_value_boolean (x); - const bool is_x_number = (x.value_type == ECMA_TYPE_NUMBER); - const bool is_x_string = (x.value_type == ECMA_TYPE_STRING); - const bool is_x_object = (x.value_type == ECMA_TYPE_OBJECT); + const bool is_x_number = ecma_is_value_number (x); + const bool is_x_string = ecma_is_value_string (x); + const bool is_x_object = ecma_is_value_object (x); const bool is_y_undefined = ecma_is_value_undefined (y); const bool is_y_null = ecma_is_value_null (y); const bool is_y_boolean = ecma_is_value_boolean (y); - const bool is_y_number = (y.value_type == ECMA_TYPE_NUMBER); - const bool is_y_string = (y.value_type == ECMA_TYPE_STRING); - const bool is_y_object = (y.value_type == ECMA_TYPE_OBJECT); + const bool is_y_number = ecma_is_value_number (y); + const bool is_y_string = ecma_is_value_string (y); + const bool is_y_object = ecma_is_value_object (y); const bool is_types_equal = ((is_x_undefined && is_y_undefined) || (is_x_null && is_y_null) @@ -222,16 +222,16 @@ ecma_op_strict_equality_compare (ecma_value_t x, /**< first operand */ const bool is_x_undefined = ecma_is_value_undefined (x); const bool is_x_null = ecma_is_value_null (x); const bool is_x_boolean = ecma_is_value_boolean (x); - const bool is_x_number = (x.value_type == ECMA_TYPE_NUMBER); - const bool is_x_string = (x.value_type == ECMA_TYPE_STRING); - const bool is_x_object = (x.value_type == ECMA_TYPE_OBJECT); + const bool is_x_number = ecma_is_value_number (x); + const bool is_x_string = ecma_is_value_string (x); + const bool is_x_object = ecma_is_value_object (x); const bool is_y_undefined = ecma_is_value_undefined (y); const bool is_y_null = ecma_is_value_null (y); const bool is_y_boolean = ecma_is_value_boolean (y); - const bool is_y_number = (y.value_type == ECMA_TYPE_NUMBER); - const bool is_y_string = (y.value_type == ECMA_TYPE_STRING); - const bool is_y_object = (y.value_type == ECMA_TYPE_OBJECT); + const bool is_y_number = ecma_is_value_number (y); + const bool is_y_string = ecma_is_value_string (y); + const bool is_y_object = ecma_is_value_object (y); const bool is_types_equal = ((is_x_undefined && is_y_undefined) || (is_x_null && is_y_null) @@ -338,8 +338,8 @@ 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 = (px.u.value.value_type == ECMA_TYPE_STRING); - const bool is_py_string = (py.u.value.value_type == ECMA_TYPE_STRING); + const bool is_px_string = ecma_is_value_string (px.u.value); + const bool is_py_string = ecma_is_value_string (py.u.value); if (!(is_px_string && is_py_string)) { diff --git a/src/libecmaoperations/ecma-conversion.c b/src/libecmaoperations/ecma-conversion.c index 579c31d50..75785708b 100644 --- a/src/libecmaoperations/ecma-conversion.c +++ b/src/libecmaoperations/ecma-conversion.c @@ -99,16 +99,16 @@ ecma_op_same_value (ecma_value_t x, /**< ecma-value */ const bool is_x_undefined = ecma_is_value_undefined (x); const bool is_x_null = ecma_is_value_null (x); const bool is_x_boolean = ecma_is_value_boolean (x); - const bool is_x_number = (x.value_type == ECMA_TYPE_NUMBER); - const bool is_x_string = (x.value_type == ECMA_TYPE_STRING); - const bool is_x_object = (x.value_type == ECMA_TYPE_OBJECT); + const bool is_x_number = ecma_is_value_number (x); + const bool is_x_string = ecma_is_value_string (x); + const bool is_x_object = ecma_is_value_object (x); const bool is_y_undefined = ecma_is_value_undefined (y); const bool is_y_null = ecma_is_value_null (y); const bool is_y_boolean = ecma_is_value_boolean (y); - const bool is_y_number = (y.value_type == ECMA_TYPE_NUMBER); - const bool is_y_string = (y.value_type == ECMA_TYPE_STRING); - const bool is_y_object = (y.value_type == ECMA_TYPE_OBJECT); + const bool is_y_number = ecma_is_value_number (y); + const bool is_y_string = ecma_is_value_string (y); + const bool is_y_object = ecma_is_value_object (y); const bool is_types_equal = ((is_x_undefined && is_y_undefined) || (is_x_null && is_y_null) @@ -361,7 +361,7 @@ ecma_op_to_number (ecma_value_t value) /**< ecma-value */ ecma_completion_value_t ecma_op_to_string (ecma_value_t value) /**< ecma-value */ { - if (unlikely (value.value_type == ECMA_TYPE_OBJECT)) + if (unlikely (ecma_is_value_object (value))) { ecma_completion_value_t ret_value; @@ -643,7 +643,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */ ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); // 1. - if (obj_value.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (obj_value)) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } @@ -804,7 +804,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */ } else { - JERRY_ASSERT (get_prop_value.u.value.value_type == ECMA_TYPE_OBJECT); + JERRY_ASSERT (ecma_is_value_object (get_prop_value.u.value)); ecma_object_t *get_p = ECMA_GET_NON_NULL_POINTER (get_prop_value.u.value.value); ecma_ref_object (get_p); @@ -848,7 +848,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */ } else { - JERRY_ASSERT (set_prop_value.u.value.value_type == ECMA_TYPE_OBJECT); + JERRY_ASSERT (ecma_is_value_object (set_prop_value.u.value)); ecma_object_t *set_p = ECMA_GET_NON_NULL_POINTER (set_prop_value.u.value.value); ecma_ref_object (set_p); diff --git a/src/libecmaoperations/ecma-function-object.c b/src/libecmaoperations/ecma-function-object.c index 170b6b5e7..b7ea0c061 100644 --- a/src/libecmaoperations/ecma-function-object.c +++ b/src/libecmaoperations/ecma-function-object.c @@ -89,7 +89,7 @@ ecma_unpack_code_internal_property_value (uint32_t value, /**< packed value */ bool ecma_op_is_callable (ecma_value_t value) /**< ecma-value */ { - if (value.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (value)) { return false; } @@ -113,7 +113,7 @@ ecma_op_is_callable (ecma_value_t value) /**< ecma-value */ bool ecma_is_constructor (ecma_value_t value) /**< ecma-value */ { - if (value.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (value)) { return false; } @@ -338,7 +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 (formal_parameter_name_value.value_type == ECMA_TYPE_STRING); + 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); bool arg_already_declared = ecma_op_has_binding (env_p, formal_parameter_name_string_p); @@ -390,7 +390,7 @@ ecma_op_function_has_instance (ecma_object_t *func_obj_p, /**< Function object * if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_FUNCTION) { - if (value.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (value)) { return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_FALSE); } @@ -406,7 +406,7 @@ 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 (prototype_obj_value.u.value.value_type != ECMA_TYPE_OBJECT) + if (!ecma_is_value_object (prototype_obj_value.u.value)) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } @@ -597,7 +597,7 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */ // 6. ecma_object_t *prototype_p; - if (func_obj_prototype_prop_value.u.value.value_type == ECMA_TYPE_OBJECT) + if (ecma_is_value_object (func_obj_prototype_prop_value.u.value)) { prototype_p = ECMA_GET_NON_NULL_POINTER (func_obj_prototype_prop_value.u.value.value); ecma_ref_object (prototype_p); @@ -628,7 +628,7 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */ ecma_value_t obj_value; // 9. - if (call_completion.u.value.value_type == ECMA_TYPE_OBJECT) + if (ecma_is_value_object (call_completion.u.value)) { ecma_deref_object (obj_p); diff --git a/src/libecmaoperations/ecma-get-put-value.c b/src/libecmaoperations/ecma-get-put-value.c index 4c6d12068..ef9a016a5 100644 --- a/src/libecmaoperations/ecma-get-put-value.c +++ b/src/libecmaoperations/ecma-get-put-value.c @@ -80,9 +80,9 @@ ecma_op_get_value_object_base (ecma_reference_t ref) /**< ECMA-reference */ const ecma_value_t base = ref.base; const bool is_unresolvable_reference = ecma_is_value_undefined (base); const bool has_primitive_base = (ecma_is_value_boolean (base) - || base.value_type == ECMA_TYPE_NUMBER - || base.value_type == ECMA_TYPE_STRING); - const bool has_object_base = (base.value_type == ECMA_TYPE_OBJECT + || 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)))); const bool is_property_reference = has_primitive_base || has_object_base; @@ -207,9 +207,9 @@ ecma_op_put_value_object_base (ecma_reference_t ref, /**< ECMA-reference */ const ecma_value_t base = ref.base; const bool is_unresolvable_reference = ecma_is_value_undefined (base); const bool has_primitive_base = (ecma_is_value_boolean (base) - || base.value_type == ECMA_TYPE_NUMBER - || base.value_type == ECMA_TYPE_STRING); - const bool has_object_base = (base.value_type == ECMA_TYPE_OBJECT + || 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)))); const bool is_property_reference = has_primitive_base || has_object_base; diff --git a/src/libecmaoperations/ecma-lex-env.c b/src/libecmaoperations/ecma-lex-env.c index d9f48d244..bcce4be0d 100644 --- a/src/libecmaoperations/ecma-lex-env.c +++ b/src/libecmaoperations/ecma-lex-env.c @@ -467,8 +467,7 @@ ecma_op_create_immutable_binding (ecma_object_t *lex_env_p, /**< lexical environ JERRY_ASSERT(ecma_is_value_undefined (prop_p->u.named_data_property.value)); - prop_p->u.named_data_property.value.value_type = ECMA_TYPE_SIMPLE; - prop_p->u.named_data_property.value.value = ECMA_SIMPLE_VALUE_EMPTY; + prop_p->u.named_data_property.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY); return; } diff --git a/src/libecmaoperations/ecma-objects-arguments.c b/src/libecmaoperations/ecma-objects-arguments.c index 7c90132c0..2bc3f2ce8 100644 --- a/src/libecmaoperations/ecma-objects-arguments.c +++ b/src/libecmaoperations/ecma-objects-arguments.c @@ -140,7 +140,7 @@ ecma_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function */ JERRY_ASSERT (formal_params_iter_p->current_value_p != NULL); JERRY_ASSERT (param_index < formal_params_number); - JERRY_ASSERT (formal_params_iter_p->current_value_p->value_type == ECMA_TYPE_STRING); + 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); } @@ -283,7 +283,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 (arg_name_prop_value.value_type == ECMA_TYPE_STRING); + 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_completion_value_t completion = ecma_op_get_binding_value (lex_env_p, diff --git a/src/libecmaoperations/ecma-objects-general.c b/src/libecmaoperations/ecma-objects-general.c index 78705db10..f17887131 100644 --- a/src/libecmaoperations/ecma-objects-general.c +++ b/src/libecmaoperations/ecma-objects-general.c @@ -621,7 +621,7 @@ ecma_op_general_object_default_value (ecma_object_t *obj_p, /**< the object */ } if (!ecma_is_completion_value_empty (call_completion) - && call_completion.u.value.value_type != ECMA_TYPE_OBJECT) + && !ecma_is_value_object (call_completion.u.value)) { return call_completion; } diff --git a/src/libecmaoperations/ecma-string-object.c b/src/libecmaoperations/ecma-string-object.c index 84d2511ab..d492a00cc 100644 --- a/src/libecmaoperations/ecma-string-object.c +++ b/src/libecmaoperations/ecma-string-object.c @@ -67,7 +67,7 @@ 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 (to_str_arg_value.u.value.value_type == ECMA_TYPE_STRING); + 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); int32_t string_len = ecma_string_get_length (prim_prop_str_value_p);