From 386a530d4da303023a450e5c13a98cf1c47b1a58 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Mon, 15 Dec 2014 22:51:17 +0300 Subject: [PATCH] Upon assignment of a number to a register variable reusing the variable's space if it already contains a number. --- src/libcoreint/opcodes-helpers-variables.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/libcoreint/opcodes-helpers-variables.c b/src/libcoreint/opcodes-helpers-variables.c index dd74ca9d7..e2d46973f 100644 --- a/src/libcoreint/opcodes-helpers-variables.c +++ b/src/libcoreint/opcodes-helpers-variables.c @@ -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 {