mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Changing return value of ecma_op_abstract_equality_compare to ecma_completion_value_t.
This commit is contained in:
parent
c9f954ec2e
commit
c581f10b94
@ -38,12 +38,16 @@ opfunc_equal_value (opcode_t opdata, /**< operation data */
|
|||||||
|
|
||||||
ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value);
|
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);
|
ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value);
|
||||||
|
ECMA_TRY_CATCH (compare_result,
|
||||||
|
ecma_op_abstract_equality_compare (left_value.u.value, right_value.u.value),
|
||||||
|
ret_value);
|
||||||
|
|
||||||
bool is_equal = ecma_op_abstract_equality_compare (left_value.u.value, right_value.u.value);
|
JERRY_ASSERT (ecma_is_completion_value_normal_true (compare_result)
|
||||||
|
|| ecma_is_completion_value_normal_false (compare_result));
|
||||||
|
|
||||||
ret_value = set_variable_value (int_data, dst_var_idx, ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE
|
ret_value = set_variable_value (int_data, dst_var_idx, compare_result.u.value);
|
||||||
: ECMA_SIMPLE_VALUE_FALSE));
|
|
||||||
|
|
||||||
|
ECMA_FINALIZE (compare_result);
|
||||||
ECMA_FINALIZE (right_value);
|
ECMA_FINALIZE (right_value);
|
||||||
ECMA_FINALIZE (left_value);
|
ECMA_FINALIZE (left_value);
|
||||||
|
|
||||||
@ -72,13 +76,19 @@ opfunc_not_equal_value (opcode_t opdata, /**< operation data */
|
|||||||
|
|
||||||
ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value);
|
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);
|
ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value);
|
||||||
|
ECMA_TRY_CATCH (compare_result,
|
||||||
|
ecma_op_abstract_equality_compare (left_value.u.value, right_value.u.value),
|
||||||
|
ret_value);
|
||||||
|
|
||||||
bool is_equal = ecma_op_abstract_equality_compare (left_value.u.value, right_value.u.value);
|
JERRY_ASSERT (ecma_is_completion_value_normal_true (compare_result)
|
||||||
|
|| ecma_is_completion_value_normal_false (compare_result));
|
||||||
|
|
||||||
|
bool is_equal = ecma_is_completion_value_normal_true (compare_result);
|
||||||
|
|
||||||
ret_value = set_variable_value (int_data, dst_var_idx, ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE
|
ret_value = set_variable_value (int_data, dst_var_idx, ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE
|
||||||
: ECMA_SIMPLE_VALUE_TRUE));
|
: ECMA_SIMPLE_VALUE_TRUE));
|
||||||
|
|
||||||
|
|
||||||
|
ECMA_FINALIZE (compare_result);
|
||||||
ECMA_FINALIZE (right_value);
|
ECMA_FINALIZE (right_value);
|
||||||
ECMA_FINALIZE (left_value);
|
ECMA_FINALIZE (left_value);
|
||||||
|
|
||||||
|
|||||||
@ -34,10 +34,12 @@
|
|||||||
* @return true - if values are equal,
|
* @return true - if values are equal,
|
||||||
* false - otherwise.
|
* false - otherwise.
|
||||||
*/
|
*/
|
||||||
bool
|
ecma_completion_value_t
|
||||||
ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
||||||
ecma_value_t y) /**< second operand */
|
ecma_value_t y) /**< second operand */
|
||||||
{
|
{
|
||||||
|
ecma_completion_value_t ret_value;
|
||||||
|
|
||||||
const bool is_x_undefined = ecma_is_value_undefined (x);
|
const bool is_x_undefined = ecma_is_value_undefined (x);
|
||||||
const bool is_x_null = ecma_is_value_null (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_boolean = ecma_is_value_boolean (x);
|
||||||
@ -67,7 +69,7 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
|||||||
|| is_x_null)
|
|| is_x_null)
|
||||||
{
|
{
|
||||||
// a., b.
|
// a., b.
|
||||||
return true;
|
ret_value = ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||||
}
|
}
|
||||||
else if (is_x_number)
|
else if (is_x_number)
|
||||||
{ // c.
|
{ // c.
|
||||||
@ -76,35 +78,45 @@ ecma_op_abstract_equality_compare (ecma_value_t x, /**< first operand */
|
|||||||
|
|
||||||
TODO(Implement according to ECMA);
|
TODO(Implement according to ECMA);
|
||||||
|
|
||||||
return (x_num == y_num);
|
bool is_equal = (x_num == y_num);
|
||||||
|
|
||||||
|
ret_value = ecma_make_simple_completion_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
|
||||||
}
|
}
|
||||||
else if (is_x_string)
|
else if (is_x_string)
|
||||||
{ // d.
|
{ // d.
|
||||||
ecma_string_t* x_str_p = ECMA_GET_POINTER(x.value);
|
ecma_string_t* x_str_p = ECMA_GET_POINTER(x.value);
|
||||||
ecma_string_t* y_str_p = ECMA_GET_POINTER(y.value);
|
ecma_string_t* y_str_p = ECMA_GET_POINTER(y.value);
|
||||||
|
|
||||||
return ecma_compare_ecma_string_to_ecma_string (x_str_p, y_str_p);
|
bool is_equal = ecma_compare_ecma_string_to_ecma_string (x_str_p, y_str_p);
|
||||||
|
|
||||||
|
ret_value = ecma_make_simple_completion_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
|
||||||
}
|
}
|
||||||
else if (is_x_boolean)
|
else if (is_x_boolean)
|
||||||
{ // e.
|
{ // e.
|
||||||
return (x.value == y.value);
|
bool is_equal = (x.value == y.value);
|
||||||
|
|
||||||
|
ret_value = ecma_make_simple_completion_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // f.
|
{ // f.
|
||||||
JERRY_ASSERT(is_x_object);
|
JERRY_ASSERT(is_x_object);
|
||||||
|
|
||||||
return (x.value == y.value);
|
bool is_equal = (x.value == y.value);
|
||||||
|
|
||||||
|
ret_value = ecma_make_simple_completion_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((is_x_null && is_y_undefined)
|
else if ((is_x_null && is_y_undefined)
|
||||||
|| (is_x_undefined && is_y_null))
|
|| (is_x_undefined && is_y_null))
|
||||||
{ // 2., 3.
|
{ // 2., 3.
|
||||||
return true;
|
ret_value = ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
JERRY_UNIMPLEMENTED();
|
JERRY_UNIMPLEMENTED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ret_value;
|
||||||
} /* ecma_op_abstract_equality_compare */
|
} /* ecma_op_abstract_equality_compare */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -26,7 +26,7 @@
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern bool ecma_op_abstract_equality_compare (ecma_value_t x, ecma_value_t y);
|
extern ecma_completion_value_t ecma_op_abstract_equality_compare (ecma_value_t x, ecma_value_t y);
|
||||||
extern bool ecma_op_strict_equality_compare (ecma_value_t x, ecma_value_t y);
|
extern bool ecma_op_strict_equality_compare (ecma_value_t x, ecma_value_t y);
|
||||||
extern ecma_completion_value_t ecma_op_abstract_relational_compare (ecma_value_t x, ecma_value_t y, bool left_first);
|
extern ecma_completion_value_t ecma_op_abstract_relational_compare (ecma_value_t x, ecma_value_t y, bool left_first);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user