Fix evaluation order for binary operators (#4114)
Furthermore fix toBoolean for BigInts as well. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -1070,7 +1070,7 @@ ecma_builtin_array_prototype_object_sort_compare_helper (ecma_value_t lhs, /**<
|
||||
{
|
||||
ecma_number_t ret_num;
|
||||
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_get_number (call_value, &ret_num)))
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_op_to_numeric (call_value, &ret_num, ECMA_TO_NUMERIC_NO_OPTS)))
|
||||
{
|
||||
ecma_free_value (call_value);
|
||||
return ECMA_VALUE_ERROR;
|
||||
|
||||
@@ -213,7 +213,7 @@ ecma_date_construct_helper (const ecma_value_t *args, /**< arguments passed to t
|
||||
/* 1-7. */
|
||||
for (uint32_t i = 0; i < args_len; i++)
|
||||
{
|
||||
ecma_value_t status = ecma_get_number (args[i], date_nums + i);
|
||||
ecma_value_t status = ecma_op_to_numeric (args[i], date_nums + i, ECMA_TO_NUMERIC_NO_OPTS);
|
||||
|
||||
if (ECMA_IS_VALUE_ERROR (status))
|
||||
{
|
||||
|
||||
@@ -612,7 +612,7 @@ ecma_builtin_global_dispatch_routine (uint16_t builtin_routine_id, /**< built-in
|
||||
{
|
||||
ecma_number_t arg_num;
|
||||
|
||||
routine_arg_1 = ecma_get_number (routine_arg_1, &arg_num);
|
||||
routine_arg_1 = ecma_op_to_numeric (routine_arg_1, &arg_num, ECMA_TO_NUMERIC_NO_OPTS);
|
||||
|
||||
if (!ecma_is_value_empty (routine_arg_1))
|
||||
{
|
||||
|
||||
@@ -539,7 +539,7 @@ ecma_builtin_helper_string_prototype_object_index_of (ecma_string_t *original_st
|
||||
else
|
||||
{
|
||||
#endif /* ENABLED (JERRY_ESNEXT) */
|
||||
ret_value = ecma_get_number (arg2, &pos_num);
|
||||
ret_value = ecma_op_to_numeric (arg2, &pos_num, ECMA_TO_NUMERIC_NO_OPTS);
|
||||
#if ENABLED (JERRY_ESNEXT)
|
||||
}
|
||||
#endif /* ENABLED (JERRY_ESNEXT) */
|
||||
|
||||
@@ -784,7 +784,7 @@ ecma_builtin_string_prototype_object_split (ecma_value_t this_value, /**< this a
|
||||
{
|
||||
/* ECMA-262 v11, 21.1.3.20 6 */
|
||||
ecma_number_t num;
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_get_number (limit_value, &num)))
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_op_to_numeric (limit_value, &num, ECMA_TO_NUMERIC_NO_OPTS)))
|
||||
{
|
||||
goto cleanup_string;
|
||||
}
|
||||
|
||||
@@ -429,7 +429,7 @@ ecma_builtin_typedarray_prototype_map (ecma_value_t this_arg, /**< this argument
|
||||
}
|
||||
|
||||
ecma_number_t mapped_num;
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_get_number (mapped_value, &mapped_num)))
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_op_to_numeric (mapped_value, &mapped_num, ECMA_TO_NUMERIC_NO_OPTS)))
|
||||
{
|
||||
ecma_free_value (mapped_value);
|
||||
ecma_free_value (current_index);
|
||||
@@ -949,7 +949,7 @@ ecma_builtin_typedarray_prototype_set (ecma_value_t this_arg, /**< this argument
|
||||
|
||||
ecma_number_t elem_num;
|
||||
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_get_number (elem, &elem_num)))
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_op_to_numeric (elem, &elem_num, ECMA_TO_NUMERIC_NO_OPTS)))
|
||||
{
|
||||
ecma_free_value (elem);
|
||||
ecma_deref_object (source_obj_p);
|
||||
@@ -1059,7 +1059,7 @@ ecma_builtin_typedarray_prototype_join (ecma_value_t this_arg, /**< this argumen
|
||||
|
||||
ecma_number_t length_number;
|
||||
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_get_number (length_value, &length_number)))
|
||||
if (ECMA_IS_VALUE_ERROR (ecma_op_to_numeric (length_value, &length_number, ECMA_TO_NUMERIC_NO_OPTS)))
|
||||
{
|
||||
ecma_free_value (length_value);
|
||||
ecma_free_value (obj_value);
|
||||
@@ -1234,7 +1234,7 @@ ecma_builtin_typedarray_prototype_fill (ecma_value_t this_arg, /**< this argumen
|
||||
}
|
||||
|
||||
ecma_number_t value_num;
|
||||
ecma_value_t ret_value = ecma_get_number (value, &value_num);
|
||||
ecma_value_t ret_value = ecma_op_to_numeric (value, &value_num, ECMA_TO_NUMERIC_NO_OPTS);
|
||||
|
||||
if (!ecma_is_value_empty (ret_value))
|
||||
{
|
||||
@@ -1355,7 +1355,7 @@ ecma_builtin_typedarray_prototype_sort_compare_helper (ecma_value_t lhs, /**< le
|
||||
}
|
||||
|
||||
ecma_number_t ret_num;
|
||||
ecma_value_t number_result = ecma_get_number (call_value, &ret_num);
|
||||
ecma_value_t number_result = ecma_op_to_numeric (call_value, &ret_num, ECMA_TO_NUMERIC_NO_OPTS);
|
||||
|
||||
ecma_free_value (call_value);
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ ecma_builtin_typedarray_of (ecma_value_t this_arg, /**< 'this' argument */
|
||||
while (k < arguments_list_len)
|
||||
{
|
||||
ecma_number_t num;
|
||||
ecma_value_t next_val = ecma_get_number (arguments_list_p[k], &num);
|
||||
ecma_value_t next_val = ecma_op_to_numeric (arguments_list_p[k], &num, ECMA_TO_NUMERIC_NO_OPTS);
|
||||
|
||||
if (ECMA_IS_VALUE_ERROR (next_val))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user