From 2027caeda5d3d93cad7ce44d334c5b5b079d7b99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Lang=C3=B3?= Date: Thu, 17 Mar 2016 11:08:53 +0100 Subject: [PATCH] Performance optimizations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * inline some hot function * add 'ecma_copy_value_if_not_object' similer to 'ecma_value_free_if_not_object' * remove unnecessary helpers * improve 'do_number_bitwise_logic' JerryScript-DCO-1.0-Signed-off-by: László Langó llango.u-szeged@partner.samsung.com --- .../ecma/base/ecma-helpers-conversion.c | 26 +------ jerry-core/ecma/base/ecma-helpers-number.c | 4 +- jerry-core/ecma/base/ecma-helpers-string.c | 38 ++-------- jerry-core/ecma/base/ecma-helpers-value.c | 71 +++++++------------ .../base/ecma-helpers-values-collection.c | 21 +++++- jerry-core/ecma/base/ecma-helpers.c | 4 +- jerry-core/ecma/base/ecma-helpers.h | 5 +- jerry-core/ecma/base/ecma-lcache.c | 8 ++- .../ecma-builtin-array-prototype.c | 60 ++++++++-------- .../ecma-builtin-error-prototype.c | 7 +- .../ecma-builtin-function-prototype.c | 8 +-- .../builtin-objects/ecma-builtin-global.c | 2 +- .../builtin-objects/ecma-builtin-helpers.c | 2 +- .../ecma/builtin-objects/ecma-builtin-json.c | 30 ++++---- .../ecma-builtin-number-prototype.c | 4 +- .../builtin-objects/ecma-builtin-object.c | 14 ++-- .../builtin-objects/ecma-builtin-regexp.c | 2 +- .../ecma-builtin-string-prototype.c | 32 ++++----- .../ecma/operations/ecma-array-object.c | 11 +-- jerry-core/ecma/operations/ecma-conversion.c | 11 +-- .../ecma/operations/ecma-function-object.c | 4 +- .../ecma/operations/ecma-get-put-value.c | 5 +- jerry-core/ecma/operations/ecma-lex-env.c | 5 +- .../ecma/operations/ecma-objects-arguments.c | 2 +- .../ecma/operations/ecma-objects-general.c | 5 +- jerry-core/ecma/operations/ecma-reference.c | 5 +- .../ecma/operations/ecma-string-object.c | 2 +- jerry-core/jerry.c | 2 +- jerry-core/vm/opcodes-ecma-bitwise.c | 22 +++--- jerry-core/vm/vm.c | 32 ++++----- 30 files changed, 202 insertions(+), 242 deletions(-) diff --git a/jerry-core/ecma/base/ecma-helpers-conversion.c b/jerry-core/ecma/base/ecma-helpers-conversion.c index 275f2fcc7..64332b0f3 100644 --- a/jerry-core/ecma/base/ecma-helpers-conversion.c +++ b/jerry-core/ecma/base/ecma-helpers-conversion.c @@ -1,4 +1,5 @@ /* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -810,28 +811,6 @@ ecma_uint32_to_utf8_string (uint32_t value, /**< value to convert */ return bytes_copied; } /* ecma_uint32_to_utf8_string */ -/** - * ECMA-defined conversion of UInt32 value to Number value - * - * @return number - result of conversion. - */ -ecma_number_t -ecma_uint32_to_number (uint32_t value) /**< unsigned 32-bit integer value */ -{ - return (ecma_number_t) value; -} /* ecma_uint32_to_number */ - -/** - * ECMA-defined conversion of Int32 value to Number value - * - * @return number - result of conversion. - */ -ecma_number_t -ecma_int32_to_number (int32_t value) /**< signed 32-bit integer value */ -{ - return (ecma_number_t) value; -} /* ecma_int32_to_number */ - /** * ECMA-defined conversion of Number value to UInt32 value * @@ -1344,7 +1323,8 @@ ecma_number_to_utf8_string (ecma_number_t num, /**< ecma-number */ // 5. uint32_t num_uint32 = ecma_number_to_uint32 (num); - if (ecma_uint32_to_number (num_uint32) == num) + + if (((ecma_number_t) num_uint32) == num) { size = ecma_uint32_to_utf8_string (num_uint32, dst_p, buffer_size); } diff --git a/jerry-core/ecma/base/ecma-helpers-number.c b/jerry-core/ecma/base/ecma-helpers-number.c index 80085c8fb..a2f168611 100644 --- a/jerry-core/ecma/base/ecma-helpers-number.c +++ b/jerry-core/ecma/base/ecma-helpers-number.c @@ -230,7 +230,7 @@ ecma_number_get_sign_field (ecma_number_t num) /**< ecma-number */ fraction is filled with anything but not all zero bits, * false - otherwise */ -bool +bool __attr_always_inline___ ecma_number_is_nan (ecma_number_t num) /**< ecma-number */ { bool is_nan = (num != num); @@ -283,7 +283,7 @@ ecma_number_make_infinity (bool sign) /**< true - for negative Infinity, * @return true - if sign bit of ecma-number is set * false - otherwise */ -bool +bool __attr_always_inline___ ecma_number_is_negative (ecma_number_t num) /**< ecma-number */ { JERRY_ASSERT (!ecma_number_is_nan (num)); diff --git a/jerry-core/ecma/base/ecma-helpers-string.c b/jerry-core/ecma/base/ecma-helpers-string.c index 1c11309d0..4c261dc09 100644 --- a/jerry-core/ecma/base/ecma-helpers-string.c +++ b/jerry-core/ecma/base/ecma-helpers-string.c @@ -238,7 +238,7 @@ ecma_string_t * ecma_new_ecma_string_from_number (ecma_number_t num) /**< ecma-number */ { uint32_t uint32_num = ecma_number_to_uint32 (num); - if (num == ecma_uint32_to_number (uint32_num)) + if (num == ((ecma_number_t) uint32_num)) { return ecma_new_ecma_string_from_uint32 (uint32_num); } @@ -533,7 +533,7 @@ ecma_string_to_number (const ecma_string_t *str_p) /**< ecma-string */ { uint32_t uint32_number = str_p->u.uint32_number; - return ecma_uint32_to_number (uint32_number); + return ((ecma_number_t) uint32_number); } case ECMA_STRING_CONTAINER_HEAP_NUMBER: @@ -1002,36 +1002,13 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri return is_equal; } /* ecma_compare_ecma_strings_longpath */ -/** - * Compare ecma-string to ecma-string if they're hashes are equal - * - * @return true - if strings are equal; - * false - may be. - */ -bool -ecma_compare_ecma_strings_equal_hashes (const ecma_string_t *string1_p, /* ecma-string */ - const ecma_string_t *string2_p) /* ecma-string */ -{ - JERRY_ASSERT (string1_p->hash == string2_p->hash); - - if (ECMA_STRING_GET_CONTAINER (string1_p) == ECMA_STRING_GET_CONTAINER (string2_p) - && string1_p->u.common_field == string2_p->u.common_field) - { - return true; - } - else - { - return false; - } -} /* ecma_compare_ecma_strings_equal_hashes */ - /** * Compare ecma-string to ecma-string * * @return true - if strings are equal; * false - otherwise. */ -bool +bool __attr_always_inline___ ecma_compare_ecma_strings (const ecma_string_t *string1_p, /* ecma-string */ const ecma_string_t *string2_p) /* ecma-string */ { @@ -1042,14 +1019,13 @@ ecma_compare_ecma_strings (const ecma_string_t *string1_p, /* ecma-string */ return false; } - if (ecma_compare_ecma_strings_equal_hashes (string1_p, string2_p)) + if (ECMA_STRING_GET_CONTAINER (string1_p) == ECMA_STRING_GET_CONTAINER (string2_p) + && string1_p->u.common_field == string2_p->u.common_field) { return true; } - else - { - return ecma_compare_ecma_strings_longpath (string1_p, string2_p); - } + + return ecma_compare_ecma_strings_longpath (string1_p, string2_p); } /* ecma_compare_ecma_strings */ /** diff --git a/jerry-core/ecma/base/ecma-helpers-value.c b/jerry-core/ecma/base/ecma-helpers-value.c index c7d0ae328..b7a1561eb 100644 --- a/jerry-core/ecma/base/ecma-helpers-value.c +++ b/jerry-core/ecma/base/ecma-helpers-value.c @@ -1,4 +1,5 @@ /* Copyright 2015-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -397,38 +398,16 @@ ecma_get_value_from_error_value (ecma_value_t value) /**< ecma value */ /** * Copy ecma value. * - * Note: - * Operation algorithm. - * switch (valuetype) - * case simple: - * simply return the value as it was passed; - * case number: - * copy the number - * and return new ecma value - * pointing to copy of the number; - * case string: - * increase reference counter of the string - * and return the value as it was passed. - * case object; - * increase reference counter of the object if do_ref_if_object is true - * and return the value as it was passed. - * - * @return See note. + * @return copy of the given value */ ecma_value_t -ecma_copy_value (ecma_value_t value, /**< ecma value */ - bool do_ref_if_object) /**< if the value is object value, - increment reference counter of the object */ +ecma_copy_value (ecma_value_t value) /**< value description */ { - ecma_value_t value_copy = 0; - switch (ecma_get_value_type_field (value)) { case ECMA_TYPE_SIMPLE: { - value_copy = value; - - break; + return value; } case ECMA_TYPE_NUMBER: { @@ -437,38 +416,38 @@ ecma_copy_value (ecma_value_t value, /**< ecma value */ ecma_number_t *number_copy_p = ecma_alloc_number (); *number_copy_p = *num_p; - value_copy = ecma_make_number_value (number_copy_p); - - break; + return ecma_make_number_value (number_copy_p); } case ECMA_TYPE_STRING: { - ecma_string_t *string_p = ecma_get_string_from_value (value); - - string_p = ecma_copy_or_ref_ecma_string (string_p); - - value_copy = ecma_make_string_value (string_p); - - break; + return ecma_make_string_value (ecma_copy_or_ref_ecma_string (ecma_get_string_from_value (value))); } case ECMA_TYPE_OBJECT: { - ecma_object_t *obj_p = ecma_get_object_from_value (value); - - if (do_ref_if_object) - { - ecma_ref_object (obj_p); - } - - value_copy = value; - - break; + ecma_ref_object (ecma_get_object_from_value (value)); + return value; } } - return value_copy; + JERRY_UNREACHABLE (); } /* ecma_copy_value */ +/** + * Copy the ecma value if not an object + * + * @return copy of the given value + */ +ecma_value_t +ecma_copy_value_if_not_object (ecma_value_t value) /**< value description */ +{ + if (ecma_get_value_type_field (value) != ECMA_TYPE_OBJECT) + { + return ecma_copy_value (value); + } + + return value; +} /* ecma_copy_value_if_not_object */ + /** * Free the ecma value */ diff --git a/jerry-core/ecma/base/ecma-helpers-values-collection.c b/jerry-core/ecma/base/ecma-helpers-values-collection.c index cb1e1dd01..62687da28 100644 --- a/jerry-core/ecma/base/ecma-helpers-values-collection.c +++ b/jerry-core/ecma/base/ecma-helpers-values-collection.c @@ -1,4 +1,5 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -67,7 +68,14 @@ ecma_new_values_collection (const ecma_value_t values_buffer[], /**< ecma values JERRY_ASSERT (cur_value_buf_iter_p + 1 <= cur_value_buf_end_p); - *cur_value_buf_iter_p++ = ecma_copy_value (values_buffer[value_index], do_ref_if_object); + if (do_ref_if_object) + { + *cur_value_buf_iter_p++ = ecma_copy_value (values_buffer[value_index]); + } + else + { + *cur_value_buf_iter_p++ = ecma_copy_value_if_not_object (values_buffer[value_index]); + } } *next_chunk_cp_p = ECMA_NULL_POINTER; @@ -189,7 +197,14 @@ ecma_append_to_values_collection (ecma_collection_header_t *header_p, /**< colle JERRY_ASSERT ((uint8_t *) (values_p + pos_of_new_value_in_chunk + 1) <= (uint8_t *) (chunk_p + 1)); - values_p[pos_of_new_value_in_chunk] = ecma_copy_value (v, do_ref_if_object); + if (do_ref_if_object) + { + values_p[pos_of_new_value_in_chunk] = ecma_copy_value (v); + } + else + { + values_p[pos_of_new_value_in_chunk] = ecma_copy_value_if_not_object (v); + } } /* ecma_append_to_values_collection */ /** diff --git a/jerry-core/ecma/base/ecma-helpers.c b/jerry-core/ecma/base/ecma-helpers.c index dd57ec27b..3b34b762e 100644 --- a/jerry-core/ecma/base/ecma-helpers.c +++ b/jerry-core/ecma/base/ecma-helpers.c @@ -1001,7 +1001,7 @@ ecma_named_data_property_assign_value (ecma_object_t *obj_p, /**< object */ ecma_value_t v = ecma_get_named_data_property_value (prop_p); ecma_free_value_if_not_object (v); - ecma_set_named_data_property_value (prop_p, ecma_copy_value (value, false)); + ecma_set_named_data_property_value (prop_p, ecma_copy_value_if_not_object (value)); } } /* ecma_named_data_property_assign_value */ @@ -1283,7 +1283,7 @@ ecma_get_property_descriptor_from_property (ecma_property_t *prop_p) /**< proper if (prop_p->flags & ECMA_PROPERTY_FLAG_NAMEDDATA) { - prop_desc.value = ecma_copy_value (ecma_get_named_data_property_value (prop_p), true); + prop_desc.value = ecma_copy_value (ecma_get_named_data_property_value (prop_p)); prop_desc.is_value_defined = true; prop_desc.is_writable = ecma_is_property_writable (prop_p); prop_desc.is_writable_defined = true; diff --git a/jerry-core/ecma/base/ecma-helpers.h b/jerry-core/ecma/base/ecma-helpers.h index cb26a16c1..95b3f6dec 100644 --- a/jerry-core/ecma/base/ecma-helpers.h +++ b/jerry-core/ecma/base/ecma-helpers.h @@ -80,7 +80,8 @@ extern ecma_number_t *ecma_get_number_from_value (ecma_value_t) __attr_pure___; extern ecma_string_t *ecma_get_string_from_value (ecma_value_t) __attr_pure___; extern ecma_object_t *ecma_get_object_from_value (ecma_value_t) __attr_pure___; extern ecma_value_t ecma_get_value_from_error_value (ecma_value_t) __attr_pure___; -extern ecma_value_t ecma_copy_value (ecma_value_t, bool); +extern ecma_value_t ecma_copy_value (ecma_value_t); +extern ecma_value_t ecma_copy_value_if_not_object (ecma_value_t); extern void ecma_free_value (ecma_value_t); extern void ecma_free_value_if_not_object (ecma_value_t); @@ -243,8 +244,6 @@ extern ecma_number_t ecma_utf8_string_to_number (const lit_utf8_byte_t *, lit_ut extern lit_utf8_size_t ecma_uint32_to_utf8_string (uint32_t, lit_utf8_byte_t *, lit_utf8_size_t); extern uint32_t ecma_number_to_uint32 (ecma_number_t); extern int32_t ecma_number_to_int32 (ecma_number_t); -extern ecma_number_t ecma_int32_to_number (int32_t); -extern ecma_number_t ecma_uint32_to_number (uint32_t); extern lit_utf8_size_t ecma_number_to_utf8_string (ecma_number_t, lit_utf8_byte_t *, lit_utf8_size_t); #endif /* !ECMA_HELPERS_H */ diff --git a/jerry-core/ecma/base/ecma-lcache.c b/jerry-core/ecma/base/ecma-lcache.c index 2ccff88e8..aa66eea51 100644 --- a/jerry-core/ecma/base/ecma-lcache.c +++ b/jerry-core/ecma/base/ecma-lcache.c @@ -1,4 +1,5 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -256,7 +257,10 @@ ecma_lcache_lookup (ecma_object_t *object_p, /**< object */ ecma_string_t *entry_prop_name_p = ECMA_GET_NON_NULL_POINTER (ecma_string_t, ecma_lcache_hash_table[hash_key][i].prop_name_cp); - if (ecma_compare_ecma_strings_equal_hashes (prop_name_p, entry_prop_name_p)) + JERRY_ASSERT (prop_name_p->hash == entry_prop_name_p->hash); + + if (ECMA_STRING_GET_CONTAINER (prop_name_p) == ECMA_STRING_GET_CONTAINER (entry_prop_name_p) + && prop_name_p->u.common_field == entry_prop_name_p->u.common_field) { ecma_property_t *prop_p = ECMA_GET_POINTER (ecma_property_t, ecma_lcache_hash_table[hash_key][i].prop_cp); JERRY_ASSERT (prop_p == NULL || ecma_is_property_lcached (prop_p)); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c index fccd1bf4f..d5c813d86 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c @@ -270,7 +270,7 @@ ecma_builtin_array_prototype_object_concat (ecma_value_t this_arg, /**< this arg if (ecma_is_value_empty (ret_value)) { ECMA_TRY_CATCH (set_length_value, - ecma_builtin_array_prototype_helper_set_length (new_array_p, ecma_uint32_to_number (new_length)), + ecma_builtin_array_prototype_helper_set_length (new_array_p, ((ecma_number_t) new_length)), ret_value); ret_value = new_array; ECMA_FINALIZE (set_length_value); @@ -512,10 +512,10 @@ ecma_builtin_array_prototype_object_pop (ecma_value_t this_arg) /**< this argume /* 5.d */ ECMA_TRY_CATCH (set_length_value, - ecma_builtin_array_prototype_helper_set_length (obj_p, ecma_uint32_to_number (len)), + ecma_builtin_array_prototype_helper_set_length (obj_p, ((ecma_number_t) len)), ret_value); - ret_value = ecma_copy_value (get_value, true); + ret_value = ecma_copy_value (get_value); ECMA_FINALIZE (set_length_value); ECMA_FINALIZE (del_value); @@ -561,7 +561,7 @@ ecma_builtin_array_prototype_object_push (ecma_value_t this_arg, /**< this argum /* 3. */ ECMA_OP_TO_NUMBER_TRY_CATCH (length_var, length_value, ret_value); - ecma_number_t n = ecma_uint32_to_number (ecma_number_to_uint32 (length_var)); + ecma_number_t n = ((ecma_number_t) ecma_number_to_uint32 (length_var)); /* 5. */ for (uint32_t index = 0; @@ -691,7 +691,7 @@ ecma_builtin_array_prototype_object_reverse (ecma_value_t this_arg) /**< this ar if (ecma_is_value_empty (ret_value)) { /* 7. */ - ret_value = ecma_copy_value (obj_this, true); + ret_value = ecma_copy_value (obj_this); } ECMA_OP_TO_NUMBER_FINALIZE (len_number); @@ -793,10 +793,10 @@ ecma_builtin_array_prototype_object_shift (ecma_value_t this_arg) /**< this argu /* 9. */ ECMA_TRY_CATCH (set_length_value, - ecma_builtin_array_prototype_helper_set_length (obj_p, ecma_uint32_to_number (len)), + ecma_builtin_array_prototype_helper_set_length (obj_p, ((ecma_number_t) len)), ret_value); /* 10. */ - ret_value = ecma_copy_value (first_value, true); + ret_value = ecma_copy_value (first_value); ECMA_FINALIZE (set_length_value); ECMA_FINALIZE (del_value); @@ -1266,7 +1266,7 @@ ecma_builtin_array_prototype_object_sort (ecma_value_t this_arg, /**< this argum ECMA_TRY_CATCH (index_value, ecma_op_object_get (obj_p, property_name_p), ret_value); - values_buffer[copied_num++] = ecma_copy_value (index_value, true); + values_buffer[copied_num++] = ecma_copy_value (index_value); ECMA_FINALIZE (index_value); } @@ -1330,7 +1330,7 @@ ecma_builtin_array_prototype_object_sort (ecma_value_t this_arg, /**< this argum if (ecma_is_value_empty (ret_value)) { - ret_value = ecma_copy_value (this_arg, true); + ret_value = ecma_copy_value (this_arg); } ECMA_OP_TO_NUMBER_FINALIZE (len_number); @@ -1607,7 +1607,7 @@ ecma_builtin_array_prototype_object_splice (ecma_value_t this_arg, /**< this arg if (ecma_is_value_empty (ret_value)) { ECMA_TRY_CATCH (set_length_value, - ecma_builtin_array_prototype_helper_set_length (obj_p, ecma_uint32_to_number (new_len)), + ecma_builtin_array_prototype_helper_set_length (obj_p, ((ecma_number_t) new_len)), ret_value); ECMA_FINALIZE (set_length_value); @@ -1670,7 +1670,7 @@ ecma_builtin_array_prototype_object_unshift (ecma_value_t this_arg, /**< this ar /* 6.a */ ecma_string_t *from_str_p = ecma_new_ecma_string_from_uint32 (k - 1); /* 6.b */ - ecma_number_t new_idx = ecma_uint32_to_number (k) + ecma_uint32_to_number (args_number) - 1; + ecma_number_t new_idx = ((ecma_number_t) k) + ((ecma_number_t) args_number) - 1; ecma_string_t *to_str_p = ecma_new_ecma_string_from_number (new_idx); /* 6.c */ @@ -1708,7 +1708,7 @@ ecma_builtin_array_prototype_object_unshift (ecma_value_t this_arg, /**< this ar if (ecma_is_value_empty (ret_value)) { - ecma_number_t new_len = ecma_uint32_to_number (len) + ecma_uint32_to_number (args_number); + ecma_number_t new_len = ((ecma_number_t) len) + ((ecma_number_t) args_number); /* 10. */ ECMA_TRY_CATCH (set_length_value, ecma_builtin_array_prototype_helper_set_length (obj_p, new_len), @@ -1796,7 +1796,7 @@ ecma_builtin_array_prototype_object_index_of (ecma_value_t this_arg, /**< this a /* 9.b.ii */ if (ecma_op_strict_equality_compare (arg1, get_value)) { - found_index = ecma_uint32_to_number (from_idx); + found_index = ((ecma_number_t) from_idx); } ECMA_FINALIZE (get_value); @@ -1951,7 +1951,7 @@ ecma_builtin_array_prototype_object_last_index_of (ecma_value_t this_arg, /**< t /* 8.b.ii */ if (ecma_op_strict_equality_compare (search_element, get_value)) { - *num_p = ecma_uint32_to_number (from_idx); + *num_p = ((ecma_number_t) from_idx); } ECMA_FINALIZE (get_value); @@ -2041,7 +2041,7 @@ ecma_builtin_array_prototype_object_every (ecma_value_t this_arg, /**< this argu /* 7.c.i */ ECMA_TRY_CATCH (get_value, ecma_op_object_get (obj_p, index_str_p), ret_value); - *num_p = ecma_uint32_to_number (index); + *num_p = ((ecma_number_t) index); current_index = ecma_make_number_value (num_p); ecma_value_t call_args[] = { get_value, current_index, obj_this }; @@ -2142,7 +2142,7 @@ ecma_builtin_array_prototype_object_some (ecma_value_t this_arg, /**< this argum /* 7.c.i */ ECMA_TRY_CATCH (get_value, ecma_op_object_get (obj_p, index_str_p), ret_value); - *num_p = ecma_uint32_to_number (index); + *num_p = ((ecma_number_t) index); current_index = ecma_make_number_value (num_p); ecma_value_t call_args[] = { get_value, current_index, obj_this }; @@ -2242,7 +2242,7 @@ ecma_builtin_array_prototype_object_for_each (ecma_value_t this_arg, /**< this a /* 7.c.i */ ECMA_TRY_CATCH (current_value, ecma_op_object_get (obj_p, index_str_p), ret_value); - *num_p = ecma_uint32_to_number (index); + *num_p = ((ecma_number_t) index); current_index = ecma_make_number_value (num_p); /* 7.c.ii */ @@ -2340,7 +2340,7 @@ ecma_builtin_array_prototype_object_map (ecma_value_t this_arg, /**< this argume /* 8.c.i */ ECMA_TRY_CATCH (current_value, ecma_op_object_get (obj_p, index_str_p), ret_value); /* 8.c.ii */ - *num_p = ecma_uint32_to_number (index); + *num_p = ((ecma_number_t) index); current_index = ecma_make_number_value (num_p); ecma_value_t call_args[] = {current_value, current_index, obj_this}; @@ -2367,7 +2367,7 @@ ecma_builtin_array_prototype_object_map (ecma_value_t this_arg, /**< this argume if (ecma_is_value_empty (ret_value)) { ECMA_TRY_CATCH (set_length_value, - ecma_builtin_array_prototype_helper_set_length (new_array_p, ecma_uint32_to_number (len)), + ecma_builtin_array_prototype_helper_set_length (new_array_p, ((ecma_number_t) len)), ret_value); ret_value = new_array; ECMA_FINALIZE (set_length_value); @@ -2457,7 +2457,7 @@ ecma_builtin_array_prototype_object_filter (ecma_value_t this_arg, /**< this arg /* 9.c.i */ ECMA_TRY_CATCH (get_value, ecma_op_object_get (obj_p, index_str_p), ret_value); - *num_p = ecma_uint32_to_number (index); + *num_p = ((ecma_number_t) index); current_index = ecma_make_number_value (num_p); ecma_value_t call_args[] = { get_value, current_index, obj_this }; @@ -2574,7 +2574,7 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg /* 7.a */ if (args_number > 1) { - accumulator = ecma_copy_value (initial_value, true); + accumulator = ecma_copy_value (initial_value); } else { @@ -2590,7 +2590,7 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg if ((k_present = (ecma_op_object_get_property (obj_p, index_str_p) != NULL))) { ECMA_TRY_CATCH (current_value, ecma_op_object_get (obj_p, index_str_p), ret_value); - accumulator = ecma_copy_value (current_value, true); + accumulator = ecma_copy_value (current_value); ECMA_FINALIZE (current_value); } /* 8.b.iv */ @@ -2617,7 +2617,7 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg /* 9.c.i */ ECMA_TRY_CATCH (current_value, ecma_op_object_get (obj_p, index_str_p), ret_value); /* 9.c.ii */ - *num_p = ecma_uint32_to_number (index); + *num_p = ((ecma_number_t) index); current_index = ecma_make_number_value (num_p); ecma_value_t call_args[] = {accumulator, current_value, current_index, obj_this}; @@ -2629,7 +2629,7 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg ret_value); ecma_free_value (accumulator); - accumulator = ecma_copy_value (call_value, true); + accumulator = ecma_copy_value (call_value); ECMA_FINALIZE (call_value); ECMA_FINALIZE (current_value); @@ -2640,7 +2640,7 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg if (ecma_is_value_empty (ret_value)) { - ret_value = ecma_copy_value (accumulator, true); + ret_value = ecma_copy_value (accumulator); } } @@ -2720,7 +2720,7 @@ ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /**< th /* 7.a */ if (args_number > 1) { - accumulator = ecma_copy_value (initial_value, true); + accumulator = ecma_copy_value (initial_value); } else { @@ -2736,7 +2736,7 @@ ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /**< th if ((k_present = (ecma_op_object_get_property (obj_p, index_str_p) != NULL))) { ECMA_TRY_CATCH (current_value, ecma_op_object_get (obj_p, index_str_p), ret_value); - accumulator = ecma_copy_value (current_value, true); + accumulator = ecma_copy_value (current_value); ECMA_FINALIZE (current_value); } /* 8.b.iv */ @@ -2763,7 +2763,7 @@ ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /**< th /* 9.c.i */ ECMA_TRY_CATCH (current_value, ecma_op_object_get (obj_p, index_str_p), ret_value); /* 9.c.ii */ - *num_p = ecma_uint32_to_number ((uint32_t) index); + *num_p = ((ecma_number_t) (uint32_t) index); current_index = ecma_make_number_value (num_p); ecma_value_t call_args[] = {accumulator, current_value, current_index, obj_this}; @@ -2775,7 +2775,7 @@ ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /**< th ret_value); ecma_free_value (accumulator); - accumulator = ecma_copy_value (call_value, true); + accumulator = ecma_copy_value (call_value); ECMA_FINALIZE (call_value); ECMA_FINALIZE (current_value); @@ -2786,7 +2786,7 @@ ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /**< th if (ecma_is_value_empty (ret_value)) { - ret_value = ecma_copy_value (accumulator, true); + ret_value = ecma_copy_value (accumulator); } ecma_free_value (accumulator); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.c index 973811dc0..c9f974c20 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.c @@ -1,4 +1,5 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -88,7 +89,7 @@ ecma_builtin_error_prototype_object_to_string (ecma_value_t this_arg) /**< this if (unlikely (ecma_is_value_error (name_to_str_completion))) { - ret_value = ecma_copy_value (name_to_str_completion, true); + ret_value = ecma_copy_value (name_to_str_completion); } else { @@ -113,7 +114,7 @@ ecma_builtin_error_prototype_object_to_string (ecma_value_t this_arg) /**< this if (unlikely (ecma_is_value_error (msg_to_str_completion))) { - ret_value = ecma_copy_value (msg_to_str_completion, true); + ret_value = ecma_copy_value (msg_to_str_completion); } else { diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c index b2a2032ad..2c7cdcd5c 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c @@ -1,4 +1,4 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. * Copyright 2015-2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -139,7 +139,7 @@ ecma_builtin_function_prototype_object_apply (ecma_value_t this_arg, /**< this a ecma_op_object_get (obj_p, curr_idx_str_p), ret_value); - arguments_list_p[index] = ecma_copy_value (get_value, true); + arguments_list_p[index] = ecma_copy_value (get_value); last_index = index + 1; ECMA_FINALIZE (get_value); @@ -256,7 +256,7 @@ ecma_builtin_function_prototype_object_bind (ecma_value_t this_arg, /**< this ar if (arg_count > 0) { - bound_this_prop_p->v.internal_property.value = ecma_copy_value (arguments_list_p[0], false); + bound_this_prop_p->v.internal_property.value = ecma_copy_value_if_not_object (arguments_list_p[0]); } else { @@ -292,7 +292,7 @@ ecma_builtin_function_prototype_object_bind (ecma_value_t this_arg, /**< this ar const ecma_length_t bound_arg_count = arg_count > 1 ? arg_count - 1 : 0; /* 15.a */ - *length_p = *ecma_get_number_from_value (get_len_value) - ecma_uint32_to_number (bound_arg_count); + *length_p = *ecma_get_number_from_value (get_len_value) - ((ecma_number_t) bound_arg_count); ecma_free_value (get_len_value); /* 15.b */ diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-global.c b/jerry-core/ecma/builtin-objects/ecma-builtin-global.c index 9e749fade..d5e608323 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-global.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-global.c @@ -173,7 +173,7 @@ ecma_builtin_global_object_eval (ecma_value_t this_arg __attr_unused___, /**< th if (!ecma_is_value_string (x)) { /* step 1 */ - ret_value = ecma_copy_value (x, true); + ret_value = ecma_copy_value (x); } else { diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-helpers.c b/jerry-core/ecma/builtin-objects/ecma-builtin-helpers.c index edc900025..05d49b78e 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-helpers.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-helpers.c @@ -527,7 +527,7 @@ ecma_builtin_helper_string_prototype_object_index_of (ecma_value_t this_arg, /** ecma_length_t index_of = 0; if (ecma_builtin_helper_string_find_index (original_str_p, search_str_p, first_index, start, &index_of)) { - *ret_num_p = ecma_uint32_to_number (index_of); + *ret_num_p = ((ecma_number_t) index_of); } ret_value = ecma_make_number_value (ret_num_p); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-json.c b/jerry-core/ecma/builtin-objects/ecma-builtin-json.c index de39c760d..2850fa25b 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-json.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-json.c @@ -853,7 +853,7 @@ ecma_builtin_json_stringify (ecma_value_t this_arg __attr_unused___, /**< 'this' /* 4.b.ii.2 */ if (ecma_is_value_string (value)) { - item = ecma_copy_value (value, true); + item = ecma_copy_value (value); } /* 4.b.ii.3 */ else if (ecma_is_value_number (value)) @@ -862,7 +862,7 @@ ecma_builtin_json_stringify (ecma_value_t this_arg __attr_unused___, /**< 'this' ecma_op_to_string (value), ret_value); - item = ecma_copy_value (str_val, true); + item = ecma_copy_value (str_val); ECMA_FINALIZE (str_val); } @@ -880,7 +880,7 @@ ecma_builtin_json_stringify (ecma_value_t this_arg __attr_unused___, /**< 'this' ecma_op_to_string (value), ret_value); - item = ecma_copy_value (val, true); + item = ecma_copy_value (val); ECMA_FINALIZE (val); } @@ -916,7 +916,7 @@ ecma_builtin_json_stringify (ecma_value_t this_arg __attr_unused___, /**< 'this' if (ecma_is_value_empty (ret_value)) { - ecma_value_t space = ecma_copy_value (arg3, true); + ecma_value_t space = ecma_copy_value (arg3); /* 5. */ if (ecma_is_value_object (arg3)) @@ -932,7 +932,7 @@ ecma_builtin_json_stringify (ecma_value_t this_arg __attr_unused___, /**< 'this' ret_value); ecma_free_value (space); - space = ecma_copy_value (val, true); + space = ecma_copy_value (val); ECMA_FINALIZE (val); } @@ -944,7 +944,7 @@ ecma_builtin_json_stringify (ecma_value_t this_arg __attr_unused___, /**< 'this' ret_value); ecma_free_value (space); - space = ecma_copy_value (val, true); + space = ecma_copy_value (val); ECMA_FINALIZE (val); } @@ -1028,7 +1028,7 @@ ecma_builtin_json_stringify (ecma_value_t this_arg __attr_unused___, /**< 'this' ecma_builtin_json_str (empty_str_p, obj_wrapper_p, &context), ret_value); - ret_value = ecma_copy_value (str_val, true); + ret_value = ecma_copy_value (str_val); ECMA_FINALIZE (str_val); @@ -1229,7 +1229,7 @@ ecma_builtin_json_str (ecma_string_t *key_p, /**< property key*/ ecma_op_object_get (holder_p, key_p), ret_value); - ecma_value_t my_val = ecma_copy_value (value, true); + ecma_value_t my_val = ecma_copy_value (value); /* 2. */ if (ecma_is_value_object (my_val)) @@ -1254,7 +1254,7 @@ ecma_builtin_json_str (ecma_string_t *key_p, /**< property key*/ ret_value); ecma_free_value (my_val); - my_val = ecma_copy_value (func_ret_val, true); + my_val = ecma_copy_value (func_ret_val); ECMA_FINALIZE (func_ret_val); } @@ -1276,7 +1276,7 @@ ecma_builtin_json_str (ecma_string_t *key_p, /**< property key*/ ret_value); ecma_free_value (my_val); - my_val = ecma_copy_value (func_ret_val, true); + my_val = ecma_copy_value (func_ret_val); ECMA_FINALIZE (func_ret_val); } @@ -1295,7 +1295,7 @@ ecma_builtin_json_str (ecma_string_t *key_p, /**< property key*/ ret_value); ecma_free_value (my_val); - my_val = ecma_copy_value (val, true); + my_val = ecma_copy_value (val); ECMA_FINALIZE (val); } @@ -1307,7 +1307,7 @@ ecma_builtin_json_str (ecma_string_t *key_p, /**< property key*/ ret_value); ecma_free_value (my_val); - my_val = ecma_copy_value (val, true); + my_val = ecma_copy_value (val); ECMA_FINALIZE (val); } @@ -1319,7 +1319,7 @@ ecma_builtin_json_str (ecma_string_t *key_p, /**< property key*/ ret_value); ecma_free_value (my_val); - my_val = ecma_copy_value (val, true); + my_val = ecma_copy_value (val); ECMA_FINALIZE (val); } @@ -1370,7 +1370,7 @@ ecma_builtin_json_str (ecma_string_t *key_p, /**< property key*/ ecma_builtin_json_array (obj_p, context_p), ret_value); - ret_value = ecma_copy_value (val, true); + ret_value = ecma_copy_value (val); ECMA_FINALIZE (val); } @@ -1381,7 +1381,7 @@ ecma_builtin_json_str (ecma_string_t *key_p, /**< property key*/ ecma_builtin_json_object (obj_p, context_p), ret_value); - ret_value = ecma_copy_value (val, true); + ret_value = ecma_copy_value (val); ECMA_FINALIZE (val); } diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c index c9f9caae3..de8f87079 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c @@ -1,4 +1,4 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. * Copyright 2015-2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -346,7 +346,7 @@ ecma_builtin_number_prototype_object_value_of (ecma_value_t this_arg) /**< this { if (ecma_is_value_number (this_arg)) { - return ecma_copy_value (this_arg, true); + return ecma_copy_value (this_arg); } else if (ecma_is_value_object (this_arg)) { diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-object.c b/jerry-core/ecma/builtin-objects/ecma-builtin-object.c index 9df66f695..330364fef 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-object.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-object.c @@ -1,4 +1,4 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. * Copyright 2015-2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -230,7 +230,7 @@ ecma_builtin_object_object_seal (ecma_value_t this_arg __attr_unused___, /**< 't ecma_set_object_extensible (obj_p, false); // 4. - ret_value = ecma_copy_value (arg, true); + ret_value = ecma_copy_value (arg); } } @@ -309,7 +309,7 @@ ecma_builtin_object_object_freeze (ecma_value_t this_arg __attr_unused___, /**< ecma_set_object_extensible (obj_p, false); // 4. - ret_value = ecma_copy_value (arg, true); + ret_value = ecma_copy_value (arg); } } @@ -340,7 +340,7 @@ ecma_builtin_object_object_prevent_extensions (ecma_value_t this_arg __attr_unus ecma_object_t *obj_p = ecma_get_object_from_value (arg); ecma_set_object_extensible (obj_p, false); - ret_value = ecma_copy_value (arg, true); + ret_value = ecma_copy_value (arg); } return ret_value; @@ -654,7 +654,7 @@ ecma_builtin_object_object_create (ecma_value_t this_arg, /**< 'this' argument * // 5. if (ecma_is_value_empty (ret_value)) { - ret_value = ecma_copy_value (ecma_make_object_value (result_obj_p), true); + ret_value = ecma_copy_value (ecma_make_object_value (result_obj_p)); } ecma_deref_object (result_obj_p); @@ -760,7 +760,7 @@ ecma_builtin_object_object_define_properties (ecma_value_t this_arg __attr_unuse // 7. if (ecma_is_value_empty (ret_value)) { - ret_value = ecma_copy_value (arg1, true); + ret_value = ecma_copy_value (arg1); } ECMA_FINALIZE (props); @@ -813,7 +813,7 @@ ecma_builtin_object_object_define_property (ecma_value_t this_arg __attr_unused_ true), ret_value); - ret_value = ecma_copy_value (arg1, true); + ret_value = ecma_copy_value (arg1); ECMA_FINALIZE (define_own_prop_ret); ecma_free_property_descriptor (&prop_desc); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.c b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.c index 27a579746..a72a95c23 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.c @@ -85,7 +85,7 @@ ecma_builtin_regexp_dispatch_construct (const ecma_value_t *arguments_list_p, /* { if (ecma_is_value_undefined (flags_value)) { - ret_value = ecma_copy_value (pattern_value, true); + ret_value = ecma_copy_value (pattern_value); } else { diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c index 2bb2c77c4..77a84f480 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c @@ -68,7 +68,7 @@ ecma_builtin_string_prototype_object_to_string (ecma_value_t this_arg) /**< this { if (ecma_is_value_string (this_arg)) { - return ecma_copy_value (this_arg, true); + return ecma_copy_value (this_arg); } else if (ecma_is_value_object (this_arg)) { @@ -214,7 +214,7 @@ ecma_builtin_string_prototype_object_char_code_at (ecma_value_t this_arg, /**< t JERRY_ASSERT (ecma_number_is_nan (index_num) || ecma_number_to_uint32 (index_num) == ecma_number_trunc (index_num)); ecma_char_t new_ecma_char = ecma_string_get_char_at_pos (original_string_p, ecma_number_to_uint32 (index_num)); - *ret_num_p = ecma_uint32_to_number (new_ecma_char); + *ret_num_p = ((ecma_number_t) new_ecma_char); } ecma_value_t new_value = ecma_make_number_value (ret_num_p); @@ -419,7 +419,7 @@ ecma_builtin_string_prototype_object_match (ecma_value_t this_arg, /**< this arg if (ecma_is_value_object (arg) && ecma_object_get_class_name (ecma_get_object_from_value (arg)) == LIT_MAGIC_STRING_REGEXP_UL) { - regexp_value = ecma_copy_value (arg, true); + regexp_value = ecma_copy_value (arg); } else { @@ -429,7 +429,7 @@ ecma_builtin_string_prototype_object_match (ecma_value_t this_arg, /**< this arg ecma_builtin_regexp_dispatch_construct (regexp_arguments, 1), ret_value); - regexp_value = ecma_copy_value (new_regexp_value, true); + regexp_value = ecma_copy_value (new_regexp_value); ECMA_FINALIZE (new_regexp_value); } @@ -584,7 +584,7 @@ ecma_builtin_string_prototype_object_match (ecma_value_t this_arg, /**< this arg else { /* 8.h. */ - ret_value = ecma_copy_value (new_array_value, true); + ret_value = ecma_copy_value (new_array_value); } } @@ -733,7 +733,7 @@ ecma_builtin_string_prototype_object_replace_match (ecma_builtin_replace_search_ JERRY_ASSERT ((ecma_length_t) ecma_number_to_uint32 (*index_number_p) == context_p->match_start); - ret_value = ecma_copy_value (match_value, true); + ret_value = ecma_copy_value (match_value); ECMA_FINALIZE (result_string_value); ECMA_FINALIZE (index_value); @@ -765,7 +765,7 @@ ecma_builtin_string_prototype_object_replace_match (ecma_builtin_replace_search_ context_p->match_start = index_of; context_p->match_end = index_of + ecma_string_get_length (search_string_p); - ret_value = ecma_copy_value (new_array_value, true); + ret_value = ecma_copy_value (new_array_value); ECMA_FINALIZE (new_array_value); } @@ -824,7 +824,7 @@ ecma_builtin_string_prototype_object_replace_get_string (ecma_builtin_replace_se ecma_op_object_get (match_object_p, index_p), ret_value); - arguments_list[i] = ecma_copy_value (current_value, true); + arguments_list[i] = ecma_copy_value (current_value); values_copied++; ECMA_FINALIZE (current_value); @@ -837,7 +837,7 @@ ecma_builtin_string_prototype_object_replace_get_string (ecma_builtin_replace_se *index_number_p = context_p->match_start; arguments_list[match_length] = ecma_make_number_value (index_number_p); - arguments_list[match_length + 1] = ecma_copy_value (context_p->input_string, true); + arguments_list[match_length + 1] = ecma_copy_value (context_p->input_string); ECMA_TRY_CATCH (result_value, ecma_op_function_call (context_p->replace_function_p, @@ -850,7 +850,7 @@ ecma_builtin_string_prototype_object_replace_get_string (ecma_builtin_replace_se ecma_op_to_string (result_value), ret_value); - ret_value = ecma_copy_value (to_string_value, true); + ret_value = ecma_copy_value (to_string_value); ECMA_FINALIZE (to_string_value); ECMA_FINALIZE (result_value); @@ -1370,7 +1370,7 @@ ecma_builtin_string_prototype_object_search (ecma_value_t this_arg, /**< this ar if (ecma_is_value_object (regexp_arg) && ecma_object_get_class_name (ecma_get_object_from_value (regexp_arg)) == LIT_MAGIC_STRING_REGEXP_UL) { - regexp_value = ecma_copy_value (regexp_arg, true); + regexp_value = ecma_copy_value (regexp_arg); } else { @@ -1381,7 +1381,7 @@ ecma_builtin_string_prototype_object_search (ecma_value_t this_arg, /**< this ar ecma_builtin_regexp_dispatch_construct (regexp_arguments, 1), ret_value); - regexp_value = ecma_copy_value (new_regexp_value, true); + regexp_value = ecma_copy_value (new_regexp_value); ECMA_FINALIZE (new_regexp_value); } @@ -1536,7 +1536,7 @@ ecma_builtin_helper_split_match (ecma_value_t input_string, /**< first argument if (ecma_is_value_object (separator) && ecma_object_get_class_name (ecma_get_object_from_value (separator)) == LIT_MAGIC_STRING_REGEXP_UL) { - ecma_value_t regexp_value = ecma_copy_value (separator, false); + ecma_value_t regexp_value = ecma_copy_value_if_not_object (separator); ECMA_TRY_CATCH (to_string_val, ecma_op_to_string (input_string), @@ -1611,7 +1611,7 @@ ecma_builtin_helper_split_match (ecma_value_t input_string, /**< first argument ecma_deref_ecma_string (magic_index_str_p); ecma_number_t *index_num_p = ecma_alloc_number (); - *index_num_p = ecma_uint32_to_number (start_idx); + *index_num_p = ((ecma_number_t) start_idx); ecma_named_data_property_assign_value (match_array_p, index_prop_p, ecma_make_number_value (index_num_p)); @@ -1719,7 +1719,7 @@ ecma_builtin_string_prototype_object_split (ecma_value_t this_arg, /**< this arg if (ecma_is_value_object (arg1) && ecma_object_get_class_name (ecma_get_object_from_value (arg1)) == LIT_MAGIC_STRING_REGEXP_UL) { - separator = ecma_copy_value (arg1, true); + separator = ecma_copy_value (arg1); } else { @@ -1727,7 +1727,7 @@ ecma_builtin_string_prototype_object_split (ecma_value_t this_arg, /**< this arg ecma_op_to_string (arg1), ret_value); - separator = ecma_copy_value (separator_to_string_val, true); + separator = ecma_copy_value (separator_to_string_val); ECMA_FINALIZE (separator_to_string_val); } diff --git a/jerry-core/ecma/operations/ecma-array-object.c b/jerry-core/ecma/operations/ecma-array-object.c index b4c666109..38d90ea8c 100644 --- a/jerry-core/ecma/operations/ecma-array-object.c +++ b/jerry-core/ecma/operations/ecma-array-object.c @@ -1,4 +1,5 @@ /* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -65,7 +66,7 @@ ecma_op_create_array_object (const ecma_value_t *arguments_list_p, /**< list of { ecma_number_t *num_p = ecma_get_number_from_value (arguments_list_p[0]); uint32_t num_uint32 = ecma_number_to_uint32 (*num_p); - if (*num_p != ecma_uint32_to_number (num_uint32)) + if (*num_p != ((ecma_number_t) num_uint32)) { return ecma_raise_range_error (ECMA_ERR_MSG ("")); } @@ -100,7 +101,7 @@ ecma_op_create_array_object (const ecma_value_t *arguments_list_p, /**< list of ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH); ecma_number_t *length_num_p = ecma_alloc_number (); - *length_num_p = ecma_uint32_to_number (length); + *length_num_p = ((ecma_number_t) length); ecma_property_t *length_prop_p = ecma_create_named_data_property (obj_p, length_magic_string_p, @@ -196,7 +197,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o uint32_t new_len_uint32 = ecma_number_to_uint32 (new_len_num); // d. - if (ecma_uint32_to_number (new_len_uint32) != new_len_num) + if (((ecma_number_t) new_len_uint32) != new_len_num) { return ecma_raise_range_error (ECMA_ERR_MSG ("")); } @@ -321,7 +322,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o ecma_number_t *new_len_num_p = ecma_get_number_from_value (new_len_property_desc.value); // 1. - *new_len_num_p = ecma_uint32_to_number (index + 1u); + *new_len_num_p = ((ecma_number_t) index + 1u); // 2. if (!new_writable) @@ -428,7 +429,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o { // i., ii. ecma_number_t *num_p = ecma_alloc_number (); - *num_p = ecma_number_add (ecma_uint32_to_number (index), ECMA_NUMBER_ONE); + *num_p = ecma_number_add (((ecma_number_t) index), ECMA_NUMBER_ONE); ecma_named_data_property_assign_value (obj_p, len_prop_p, ecma_make_number_value (num_p)); diff --git a/jerry-core/ecma/operations/ecma-conversion.c b/jerry-core/ecma/operations/ecma-conversion.c index d859c44c6..a5192bfe4 100644 --- a/jerry-core/ecma/operations/ecma-conversion.c +++ b/jerry-core/ecma/operations/ecma-conversion.c @@ -1,4 +1,5 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -178,7 +179,7 @@ ecma_op_to_primitive (ecma_value_t value, /**< ecma value */ } else { - return ecma_copy_value (value, true); + return ecma_copy_value (value); } } /* ecma_op_to_primitive */ @@ -262,7 +263,7 @@ ecma_op_to_number (ecma_value_t value) /**< ecma value */ if (ecma_is_value_number (value)) { - return ecma_copy_value (value, true); + return ecma_copy_value (value); } else if (ecma_is_value_string (value)) { @@ -409,7 +410,7 @@ ecma_op_to_object (ecma_value_t value) /**< ecma value */ } else if (ecma_is_value_object (value)) { - return ecma_copy_value (value, true); + return ecma_copy_value (value); } else { @@ -664,7 +665,7 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */ ret_value); prop_desc.is_value_defined = true; - prop_desc.value = ecma_copy_value (value_prop_value, true); + prop_desc.value = ecma_copy_value (value_prop_value); ECMA_FINALIZE (value_prop_value); } diff --git a/jerry-core/ecma/operations/ecma-function-object.c b/jerry-core/ecma/operations/ecma-function-object.c index 5fc7263d9..99cb625dc 100644 --- a/jerry-core/ecma/operations/ecma-function-object.c +++ b/jerry-core/ecma/operations/ecma-function-object.c @@ -591,7 +591,7 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */ // 1. if (is_strict) { - this_binding = ecma_copy_value (this_arg_value, true); + this_binding = ecma_copy_value (this_arg_value); } else if (ecma_is_value_undefined (this_arg_value) || ecma_is_value_null (this_arg_value)) @@ -794,7 +794,7 @@ ecma_op_function_construct_simple_or_external (ecma_object_t *func_obj_p, /**< F // 9. if (ecma_is_value_object (call_completion)) { - ret_value = ecma_copy_value (call_completion, true); + ret_value = ecma_copy_value (call_completion); } else { diff --git a/jerry-core/ecma/operations/ecma-get-put-value.c b/jerry-core/ecma/operations/ecma-get-put-value.c index 512a84d87..77c8a537f 100644 --- a/jerry-core/ecma/operations/ecma-get-put-value.c +++ b/jerry-core/ecma/operations/ecma-get-put-value.c @@ -1,4 +1,5 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -126,7 +127,7 @@ ecma_op_get_value_object_base (ecma_reference_t ref) /**< ECMA-reference */ else if (prop_p->flags & ECMA_PROPERTY_FLAG_NAMEDDATA) { // 4. - ret_value = ecma_copy_value (ecma_get_named_data_property_value (prop_p), true); + ret_value = ecma_copy_value (ecma_get_named_data_property_value (prop_p)); } else { diff --git a/jerry-core/ecma/operations/ecma-lex-env.c b/jerry-core/ecma/operations/ecma-lex-env.c index 53be33bfc..7c01e66a3 100644 --- a/jerry-core/ecma/operations/ecma-lex-env.c +++ b/jerry-core/ecma/operations/ecma-lex-env.c @@ -1,4 +1,5 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -277,7 +278,7 @@ ecma_op_get_binding_value (ecma_object_t *lex_env_p, /**< lexical environment */ } } - return ecma_copy_value (prop_value, true); + return ecma_copy_value (prop_value); } else { diff --git a/jerry-core/ecma/operations/ecma-objects-arguments.c b/jerry-core/ecma/operations/ecma-objects-arguments.c index 609a4698c..691887fb0 100644 --- a/jerry-core/ecma/operations/ecma-objects-arguments.c +++ b/jerry-core/ecma/operations/ecma-objects-arguments.c @@ -80,7 +80,7 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function // 1. ecma_number_t *len_p = ecma_alloc_number (); - *len_p = ecma_uint32_to_number (arguments_number); + *len_p = ((ecma_number_t) arguments_number); // 4. ecma_property_t *class_prop_p = ecma_create_internal_property (obj_p, ECMA_INTERNAL_PROPERTY_CLASS); diff --git a/jerry-core/ecma/operations/ecma-objects-general.c b/jerry-core/ecma/operations/ecma-objects-general.c index 0d00edd70..f94ac4bfa 100644 --- a/jerry-core/ecma/operations/ecma-objects-general.c +++ b/jerry-core/ecma/operations/ecma-objects-general.c @@ -1,4 +1,5 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -158,7 +159,7 @@ ecma_op_general_object_get (ecma_object_t *obj_p, /**< the object */ // 3. if (prop_p->flags & ECMA_PROPERTY_FLAG_NAMEDDATA) { - return ecma_copy_value (ecma_get_named_data_property_value (prop_p), true); + return ecma_copy_value (ecma_get_named_data_property_value (prop_p)); } else { diff --git a/jerry-core/ecma/operations/ecma-reference.c b/jerry-core/ecma/operations/ecma-reference.c index bb2ed011c..31ac9432e 100644 --- a/jerry-core/ecma/operations/ecma-reference.c +++ b/jerry-core/ecma/operations/ecma-reference.c @@ -1,4 +1,5 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014-2016 Samsung Electronics Co., Ltd. + * Copyright 2016 University of Szeged. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -100,7 +101,7 @@ ecma_make_reference (ecma_value_t base, /**< base value */ name_p = ecma_copy_or_ref_ecma_string (name_p); ecma_reference_t ref; - ref.base = ecma_copy_value (base, true); + ref.base = ecma_copy_value (base); ref.is_strict = (is_strict != 0); ECMA_SET_POINTER (ref.referenced_name_cp, name_p); diff --git a/jerry-core/ecma/operations/ecma-string-object.c b/jerry-core/ecma/operations/ecma-string-object.c index 274870ac7..fe83eeade 100644 --- a/jerry-core/ecma/operations/ecma-string-object.c +++ b/jerry-core/ecma/operations/ecma-string-object.c @@ -72,7 +72,7 @@ ecma_op_create_string_object (const ecma_value_t *arguments_list_p, /**< list of prim_prop_str_value_p = ecma_get_string_from_value (to_str_arg_value); ecma_length_t string_len = ecma_string_get_length (prim_prop_str_value_p); - length_value = ecma_uint32_to_number ((uint32_t) string_len); + length_value = ((ecma_number_t) (uint32_t) string_len); } } diff --git a/jerry-core/jerry.c b/jerry-core/jerry.c index 4a3255de3..8e76a7730 100644 --- a/jerry-core/jerry.c +++ b/jerry-core/jerry.c @@ -749,7 +749,7 @@ jerry_api_create_array_object (jerry_api_size_t size) /* size of array */ JERRY_ASSERT (size > 0); ecma_number_t *length_num_p = ecma_alloc_number (); - *length_num_p = ecma_uint32_to_number (size); + *length_num_p = ((ecma_number_t) size); ecma_value_t array_length = ecma_make_number_value (length_num_p); jerry_api_length_t argument_size = 1; diff --git a/jerry-core/vm/opcodes-ecma-bitwise.c b/jerry-core/vm/opcodes-ecma-bitwise.c index 4359c72ef..c68ca99b6 100644 --- a/jerry-core/vm/opcodes-ecma-bitwise.c +++ b/jerry-core/vm/opcodes-ecma-bitwise.c @@ -49,47 +49,47 @@ do_number_bitwise_logic (number_bitwise_logic_op op, /**< number bitwise logic o ECMA_OP_TO_NUMBER_TRY_CATCH (num_right, right_value, ret_value); ecma_number_t *res_p = ecma_alloc_number (); - - int32_t left_int32 = ecma_number_to_int32 (num_left); - - uint32_t left_uint32 = ecma_number_to_uint32 (num_left); uint32_t right_uint32 = ecma_number_to_uint32 (num_right); switch (op) { case NUMBER_BITWISE_LOGIC_AND: { - *res_p = ecma_int32_to_number ((int32_t) (left_uint32 & right_uint32)); + uint32_t left_uint32 = ecma_number_to_uint32 (num_left); + *res_p = (ecma_number_t) ((int32_t) (left_uint32 & right_uint32)); break; } case NUMBER_BITWISE_LOGIC_OR: { - *res_p = ecma_int32_to_number ((int32_t) (left_uint32 | right_uint32)); + uint32_t left_uint32 = ecma_number_to_uint32 (num_left); + *res_p = (ecma_number_t) ((int32_t) (left_uint32 | right_uint32)); break; } case NUMBER_BITWISE_LOGIC_XOR: { - *res_p = ecma_int32_to_number ((int32_t) (left_uint32 ^ right_uint32)); + uint32_t left_uint32 = ecma_number_to_uint32 (num_left); + *res_p = (ecma_number_t) ((int32_t) (left_uint32 ^ right_uint32)); break; } case NUMBER_BITWISE_SHIFT_LEFT: { - *res_p = ecma_int32_to_number (left_int32 << (right_uint32 & 0x1F)); + *res_p = (ecma_number_t) (ecma_number_to_int32 (num_left) << (right_uint32 & 0x1F)); break; } case NUMBER_BITWISE_SHIFT_RIGHT: { - *res_p = ecma_int32_to_number (left_int32 >> (right_uint32 & 0x1F)); + *res_p = (ecma_number_t) (ecma_number_to_int32 (num_left) >> (right_uint32 & 0x1F)); break; } case NUMBER_BITWISE_SHIFT_URIGHT: { - *res_p = ecma_uint32_to_number (left_uint32 >> (right_uint32 & 0x1F)); + uint32_t left_uint32 = ecma_number_to_uint32 (num_left); + *res_p = (ecma_number_t) (left_uint32 >> (right_uint32 & 0x1F)); break; } case NUMBER_BITWISE_NOT: { - *res_p = ecma_int32_to_number ((int32_t) ~right_uint32); + *res_p = (ecma_number_t) ((int32_t) ~right_uint32); break; } } diff --git a/jerry-core/vm/vm.c b/jerry-core/vm/vm.c index b2c55314d..e381d7232 100644 --- a/jerry-core/vm/vm.c +++ b/jerry-core/vm/vm.c @@ -224,7 +224,7 @@ vm_run_eval (ecma_compiled_code_t *bytecode_data_p, /**< byte-code data */ /* ECMA-262 v5, 10.4.2 */ if (is_direct) { - this_binding = ecma_copy_value (vm_top_context_p->this_binding, true); + this_binding = ecma_copy_value (vm_top_context_p->this_binding); lex_env_p = vm_top_context_p->lex_env_p; ecma_ref_object (vm_top_context_p->lex_env_p); } @@ -477,7 +477,7 @@ enum if ((literal_index) < register_end) \ { \ /* Note: There should be no specialization for arguments. */ \ - (target_value) = ecma_copy_value (frame_ctx_p->registers_p[literal_index], true); \ + (target_value) = ecma_copy_value (frame_ctx_p->registers_p[literal_index]); \ target_free_op; \ } \ else \ @@ -836,7 +836,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ case VM_OC_GET_DATA_GET_ID (VM_OC_GET_THIS_LITERAL): { right_value = left_value; - left_value = ecma_copy_value (frame_ctx_p->this_binding, true); + left_value = ecma_copy_value (frame_ctx_p->this_binding); free_flags = (uint8_t) ((free_flags << 1) | VM_FREE_LEFT_VALUE); break; } @@ -947,7 +947,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ } case VM_OC_PUSH_THIS: { - result = ecma_copy_value (frame_ctx_p->this_binding, true); + result = ecma_copy_value (frame_ctx_p->this_binding); break; } case VM_OC_PUSH_NUMBER: @@ -1130,7 +1130,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ { *stack_top_p++ = ecma_make_simple_value (ECMA_SIMPLE_VALUE_REGISTER_REF); *stack_top_p++ = literal_index; - result = ecma_copy_value (frame_ctx_p->registers_p[literal_index], true); + result = ecma_copy_value (frame_ctx_p->registers_p[literal_index]); } else { @@ -1185,8 +1185,8 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ { JERRY_ASSERT (opcode == CBC_PUSH_PROP_LITERAL_LITERAL_REFERENCE || opcode == CBC_PUSH_PROP_THIS_LITERAL_REFERENCE); - *stack_top_p++ = ecma_copy_value (left_value, true); - *stack_top_p++ = ecma_copy_value (right_value, true); + *stack_top_p++ = ecma_copy_value (left_value); + *stack_top_p++ = ecma_copy_value (right_value); } /* FALLTHRU */ } @@ -1253,7 +1253,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ JERRY_ASSERT (opcode == CBC_POST_INCR_IDENT_PUSH_RESULT || opcode == CBC_POST_DECR_IDENT_PUSH_RESULT); - *stack_top_p++ = ecma_copy_value (result, true); + *stack_top_p++ = ecma_copy_value (result); } else { @@ -1266,14 +1266,14 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ stack_top_p++; stack_top_p[-1] = stack_top_p[-2]; stack_top_p[-2] = stack_top_p[-3]; - stack_top_p[-3] = ecma_copy_value (result, true); + stack_top_p[-3] = ecma_copy_value (result); } opcode_data &= (uint32_t)~VM_OC_PUT_STACK; } else if (opcode_data & VM_OC_PUT_BLOCK) { ecma_free_value (block_result); - block_result = ecma_copy_value (result, true); + block_result = ecma_copy_value (result); opcode_data &= (uint32_t) ~VM_OC_PUT_BLOCK; } } @@ -1297,7 +1297,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ case VM_OC_ASSIGN_PROP_THIS: { result = stack_top_p[-1]; - stack_top_p[-1] = ecma_copy_value (frame_ctx_p->this_binding, true); + stack_top_p[-1] = ecma_copy_value (frame_ctx_p->this_binding); *stack_top_p++ = left_value; free_flags = 0; break; @@ -1542,7 +1542,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ if (literal_index < register_end) { - left_value = ecma_copy_value (frame_ctx_p->registers_p[literal_index], true); + left_value = ecma_copy_value (frame_ctx_p->registers_p[literal_index]); free_flags = VM_FREE_LEFT_VALUE; } else @@ -2110,7 +2110,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ if (opcode_data & (VM_OC_PUT_STACK | VM_OC_PUT_BLOCK)) { - result = ecma_copy_value (result, true); + result = ecma_copy_value (result); } } else @@ -2154,7 +2154,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */ if (opcode_data & (VM_OC_PUT_STACK | VM_OC_PUT_BLOCK)) { - result = ecma_copy_value (result, true); + result = ecma_copy_value (result); } } else @@ -2372,7 +2372,7 @@ vm_execute (vm_frame_ctx_t *frame_ctx_p, /**< frame context */ ecma_collection_iterator_next (&arguments_iterator); value = *arguments_iterator.current_value_p; - frame_ctx_p->registers_p[i] = ecma_copy_value (value, true); + frame_ctx_p->registers_p[i] = ecma_copy_value (value); } } else @@ -2387,7 +2387,7 @@ vm_execute (vm_frame_ctx_t *frame_ctx_p, /**< frame context */ for (uint32_t i = 0; i < arg_list_len; i++) { - frame_ctx_p->registers_p[i] = ecma_copy_value (src_p[i], true); + frame_ctx_p->registers_p[i] = ecma_copy_value (src_p[i]); } }