Upon assignment of a number to a register variable reusing the variable's space if it already contains a number.

This commit is contained in:
Ruben Ayrapetyan
2014-12-15 22:51:17 +03:00
parent eb80e817d8
commit 386a530d4d
+13 -5
View File
@@ -132,16 +132,24 @@ set_variable_value (int_data_t *int_data, /**< interpreter context */
if (is_reg_variable (int_data, var_idx))
{
ret_value = ecma_make_empty_completion_value ();
ecma_value_t reg_value = int_data->regs_p[ var_idx - int_data->min_reg_num ];
if (!ecma_is_value_empty (reg_value))
if (ecma_is_value_number (reg_value)
&& ecma_is_value_number (value))
{
ecma_free_value (reg_value, true);
*ecma_get_number_from_value (reg_value) = *ecma_get_number_from_value (value);
}
else
{
if (!ecma_is_value_empty (reg_value))
{
ecma_free_value (reg_value, true);
}
int_data->regs_p[ var_idx - int_data->min_reg_num ] = ecma_copy_value (value, true);
ret_value = ecma_make_empty_completion_value ();
int_data->regs_p[ var_idx - int_data->min_reg_num ] = ecma_copy_value (value, true);
}
}
else
{