Add support of NaN in opfunc_unary_minus

This commit is contained in:
Ilmir Usmanov 2014-10-15 15:33:00 +04:00
parent 032031a861
commit a9856dcf9a
2 changed files with 11 additions and 9 deletions

View File

@ -322,16 +322,10 @@ opfunc_unary_plus (opcode_t opdata, /**< operation data */
ECMA_TRY_CATCH (var_value, get_variable_value (int_data, var_idx, false), ret_value);
ECMA_TRY_CATCH (num_value, ecma_op_to_number (var_value.u.value), ret_value);
ecma_number_t *var_p, *res_p;
var_p = (ecma_number_t*) ECMA_GET_POINTER (num_value.u.value.value);
res_p = ecma_alloc_number ();
*res_p = *var_p;
ecma_number_t *var_p = (ecma_number_t*) ECMA_GET_POINTER (num_value.u.value.value);
ret_value = set_variable_value (int_data,
dst_var_idx,
ecma_make_number_value (res_p));
ecma_dealloc_number (res_p);
ecma_make_number_value (var_p));
ECMA_FINALIZE (num_value);
ECMA_FINALIZE (var_value);
@ -365,7 +359,14 @@ opfunc_unary_minus (opcode_t opdata, /**< operation data */
var_p = (ecma_number_t*) ECMA_GET_POINTER (num_value.u.value.value);
res_p = ecma_alloc_number ();
*res_p = ecma_number_negate (*var_p);
if (ecma_number_is_nan (*var_p))
{
*res_p = *var_p;
}
else
{
*res_p = ecma_number_negate (*var_p);
}
ret_value = set_variable_value (int_data,
dst_var_idx,
ecma_make_number_value (res_p));

View File

@ -16,3 +16,4 @@ assert (+0 === -0);
assert (1/-0 === -Infinity);
assert (1/+0 === Infinity);
assert ("3" -+-+-+ "1" + "1" / "3" * "6" + "2" === "42");
assert (isNaN (-NaN));