From 5ecf83ee8af850b28b58b731a4d3bd616e81c220 Mon Sep 17 00:00:00 2001 From: Zoltan Herczeg Date: Fri, 20 May 2016 03:06:14 -0700 Subject: [PATCH] Change internal property values of built-in primitive objects (namely Number, String, Boolean) to use ecma-values. When the value of a Number object is a small integer number, this change reduces the memory consumption, since no double is allocated. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com --- jerry-core/ecma/base/ecma-gc.c | 9 ++++----- jerry-core/ecma/base/ecma-globals.h | 5 ++--- jerry-core/ecma/base/ecma-helpers.c | 9 ++++----- .../ecma-builtin-boolean-prototype.c | 13 +++---------- .../ecma-builtin-date-prototype.c | 8 ++++---- .../ecma/builtin-objects/ecma-builtin-date.c | 2 +- .../builtin-objects/ecma-builtin-helpers-date.c | 4 ++-- .../ecma-builtin-number-prototype.c | 8 +++----- .../ecma-builtin-string-prototype.c | 5 ++--- jerry-core/ecma/builtin-objects/ecma-builtins.c | 17 +++++++---------- .../ecma/operations/ecma-boolean-object.c | 7 ++----- jerry-core/ecma/operations/ecma-number-object.c | 11 ++++------- jerry-core/ecma/operations/ecma-string-object.c | 14 ++++++-------- 13 files changed, 44 insertions(+), 68 deletions(-) diff --git a/jerry-core/ecma/base/ecma-gc.c b/jerry-core/ecma/base/ecma-gc.c index 35648feca..ae33c93e5 100644 --- a/jerry-core/ecma/base/ecma-gc.c +++ b/jerry-core/ecma/base/ecma-gc.c @@ -242,11 +242,11 @@ ecma_gc_mark_property (ecma_property_t *property_p) /**< property */ switch (ECMA_PROPERTY_GET_INTERNAL_PROPERTY_TYPE (property_p)) { - case ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE: /* compressed pointer to a ecma_string_t */ - case ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE: /* compressed pointer to a ecma_number_t */ - case ECMA_INTERNAL_PROPERTY_PRIMITIVE_BOOLEAN_VALUE: /* a simple boolean value */ + case ECMA_INTERNAL_PROPERTY_ECMA_VALUE: /* an ecma_value_t except object */ + case ECMA_INTERNAL_PROPERTY_DATE_FLOAT: /* pointer to a ecma_number_t */ case ECMA_INTERNAL_PROPERTY_CLASS: /* an enum */ - case ECMA_INTERNAL_PROPERTY_CODE_BYTECODE: /* compressed pointer to a bytecode array */ + case ECMA_INTERNAL_PROPERTY_CODE_BYTECODE: /* pointer to a bytecode array */ + case ECMA_INTERNAL_PROPERTY_REGEXP_BYTECODE: /* pointer to a regexp bytecode array */ case ECMA_INTERNAL_PROPERTY_NATIVE_CODE: /* an external pointer */ case ECMA_INTERNAL_PROPERTY_NATIVE_HANDLE: /* an external pointer */ case ECMA_INTERNAL_PROPERTY_FREE_CALLBACK: /* an object's native free callback */ @@ -254,7 +254,6 @@ ecma_gc_mark_property (ecma_property_t *property_p) /**< property */ case ECMA_INTERNAL_PROPERTY_BUILT_IN_ROUTINE_DESC: /* an integer */ case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31: /* an integer (bit-mask) */ case ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_32_63: /* an integer (bit-mask) */ - case ECMA_INTERNAL_PROPERTY_REGEXP_BYTECODE: { break; } diff --git a/jerry-core/ecma/base/ecma-globals.h b/jerry-core/ecma/base/ecma-globals.h index 8c23e7cbf..fcee95544 100644 --- a/jerry-core/ecma/base/ecma-globals.h +++ b/jerry-core/ecma/base/ecma-globals.h @@ -186,9 +186,8 @@ typedef enum ECMA_INTERNAL_PROPERTY_NATIVE_CODE, /**< native handler location descriptor */ ECMA_INTERNAL_PROPERTY_NATIVE_HANDLE, /**< native handle associated with an object */ ECMA_INTERNAL_PROPERTY_FREE_CALLBACK, /**< object's native free callback */ - ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE, /**< [[Primitive value]] for String objects */ - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE, /**< [[Primitive value]] for Number objects */ - ECMA_INTERNAL_PROPERTY_PRIMITIVE_BOOLEAN_VALUE, /**< [[Primitive value]] for Boolean objects */ + ECMA_INTERNAL_PROPERTY_ECMA_VALUE, /**< [[Primitive value]] for String, Number, and Boolean */ + ECMA_INTERNAL_PROPERTY_DATE_FLOAT, /**< float number value type for date objects */ /** Bound function internal properties **/ ECMA_INTERNAL_PROPERTY_BOUND_FUNCTION_TARGET_FUNCTION, diff --git a/jerry-core/ecma/base/ecma-helpers.c b/jerry-core/ecma/base/ecma-helpers.c index bd26eec6a..8730ec877 100644 --- a/jerry-core/ecma/base/ecma-helpers.c +++ b/jerry-core/ecma/base/ecma-helpers.c @@ -801,15 +801,15 @@ ecma_free_internal_property (ecma_property_t *property_p) /**< the property */ switch (ECMA_PROPERTY_GET_INTERNAL_PROPERTY_TYPE (property_p)) { - case ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE: /* compressed pointer to a ecma_string_t */ + case ECMA_INTERNAL_PROPERTY_ECMA_VALUE: /* ecma-value property except object */ { - ecma_string_t *str_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_string_t, property_value); - ecma_deref_ecma_string (str_p); + JERRY_ASSERT (!ecma_is_value_object (property_value)); + ecma_free_value (property_value); break; } - case ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE: /* pointer to a ecma_number_t */ + case ECMA_INTERNAL_PROPERTY_DATE_FLOAT: /* pointer to a ecma_number_t */ { ecma_number_t *num_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_number_t, property_value); ecma_dealloc_number (num_p); @@ -826,7 +826,6 @@ ecma_free_internal_property (ecma_property_t *property_p) /**< the property */ break; } - case ECMA_INTERNAL_PROPERTY_PRIMITIVE_BOOLEAN_VALUE: /* a simple boolean value */ case ECMA_INTERNAL_PROPERTY_SCOPE: /* a lexical environment */ case ECMA_INTERNAL_PROPERTY_PARAMETERS_MAP: /* an object */ case ECMA_INTERNAL_PROPERTY_CLASS: /* an enum */ diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.c index 5e128fedf..f6f3b1a59 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.c @@ -105,18 +105,11 @@ ecma_builtin_boolean_prototype_object_value_of (ecma_value_t this_arg) /**< this if (ecma_object_get_class_name (obj_p) == LIT_MAGIC_STRING_BOOLEAN_UL) { ecma_property_t *prim_value_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_BOOLEAN_VALUE); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); - JERRY_ASSERT (ecma_get_internal_property_value (prim_value_prop_p) < ECMA_SIMPLE_VALUE__COUNT); + JERRY_ASSERT (ecma_is_value_boolean (ecma_get_internal_property_value (prim_value_prop_p))); - ecma_simple_value_t prim_simple_value; - prim_simple_value = (ecma_simple_value_t) ecma_get_internal_property_value (prim_value_prop_p); - - ecma_value_t ret_boolean_value = ecma_make_simple_value (prim_simple_value); - - JERRY_ASSERT (ecma_is_value_boolean (ret_boolean_value)); - - return ret_boolean_value; + return ecma_get_internal_property_value (prim_value_prop_p); } } diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.c b/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.c index b9c5c1842..05c179009 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.c @@ -106,7 +106,7 @@ ecma_builtin_date_prototype_to_date_string (ecma_value_t this_arg) /**< this arg ecma_object_t *obj_p = ecma_get_object_from_value (obj_this); ecma_property_t *prim_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_DATE_FLOAT); ecma_number_t *prim_value_num_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_number_t, ecma_get_internal_property_value (prim_prop_p)); @@ -153,7 +153,7 @@ ecma_builtin_date_prototype_to_time_string (ecma_value_t this_arg) /**< this arg ecma_object_t *obj_p = ecma_get_object_from_value (obj_this); ecma_property_t *prim_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_DATE_FLOAT); ecma_number_t *prim_value_num_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_number_t, ecma_get_internal_property_value (prim_prop_p)); @@ -251,7 +251,7 @@ ecma_builtin_date_prototype_get_time (ecma_value_t this_arg) /**< this argument if (ecma_object_get_class_name (obj_p) == LIT_MAGIC_STRING_DATE_UL) { ecma_property_t *prim_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_DATE_FLOAT); ecma_number_t *prim_value_num_p; prim_value_num_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_number_t, @@ -360,7 +360,7 @@ ecma_builtin_date_prototype_set_time (ecma_value_t this_arg, /**< this argument ecma_object_t *obj_p = ecma_get_object_from_value (this_arg); ecma_property_t *prim_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_DATE_FLOAT); ecma_number_t *prim_value_num_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_number_t, ecma_get_internal_property_value (prim_prop_p)); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-date.c b/jerry-core/ecma/builtin-objects/ecma-builtin-date.c index 8d0463da7..6e3f8ffa7 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-date.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-date.c @@ -549,7 +549,7 @@ ecma_builtin_date_dispatch_construct (const ecma_value_t *arguments_list_p, /**< ecma_set_internal_property_value (class_prop_p, LIT_MAGIC_STRING_DATE_UL); ecma_property_t *prim_value_prop_p = ecma_create_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_DATE_FLOAT); ecma_number_t *prim_value_num_p = ecma_alloc_number (); *prim_value_num_p = prim_value_num; diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-helpers-date.c b/jerry-core/ecma/builtin-objects/ecma-builtin-helpers-date.c index 84105f3ac..11c39b8bb 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-helpers-date.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-helpers-date.c @@ -900,7 +900,7 @@ ecma_date_set_internal_property (ecma_value_t this_arg, /**< this argument */ ecma_object_t *obj_p = ecma_get_object_from_value (this_arg); ecma_property_t *prim_value_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_DATE_FLOAT); ecma_number_t *prim_value_num_p; prim_value_num_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_number_t, @@ -1303,7 +1303,7 @@ ecma_date_get_primitive_value (ecma_value_t this_arg) /**< this argument */ { ecma_object_t *obj_p = ecma_get_object_from_value (this_arg); ecma_property_t *prim_value_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_DATE_FLOAT); JERRY_ASSERT (prim_value_prop_p != NULL); ecma_number_t prim_value_num; 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 6e6f77e87..cdd64c7fa 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.c @@ -356,13 +356,11 @@ ecma_builtin_number_prototype_object_value_of (ecma_value_t this_arg) /**< this if (ecma_object_get_class_name (obj_p) == LIT_MAGIC_STRING_NUMBER_UL) { ecma_property_t *prim_value_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); - ecma_number_t *prim_value_num_p; - prim_value_num_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_number_t, - ecma_get_internal_property_value (prim_value_prop_p)); + JERRY_ASSERT (ecma_is_value_number (ecma_get_internal_property_value (prim_value_prop_p))); - return ecma_make_number_value (*prim_value_num_p); + return ecma_copy_value (ecma_get_internal_property_value (prim_value_prop_p)); } } 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 91bd371e6..1615aeb23 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c @@ -77,11 +77,10 @@ ecma_builtin_string_prototype_object_to_string (ecma_value_t this_arg) /**< this if (ecma_object_get_class_name (obj_p) == LIT_MAGIC_STRING_STRING_UL) { ecma_property_t *prim_value_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); ecma_string_t *prim_value_str_p; - prim_value_str_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_string_t, - ecma_get_internal_property_value (prim_value_prop_p)); + prim_value_str_p = ecma_get_string_from_value (ecma_get_internal_property_value (prim_value_prop_p)); prim_value_str_p = ecma_copy_or_ref_ecma_string (prim_value_str_p); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtins.c b/jerry-core/ecma/builtin-objects/ecma-builtins.c index f9d2a3e0b..227f49746 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtins.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtins.c @@ -125,8 +125,8 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */ ecma_property_t *prim_value_prop_p; prim_value_prop_p = ecma_create_internal_property (object_obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE); - ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (prim_value_prop_p)->value, prim_prop_str_value_p); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); + ecma_set_internal_property_value (prim_value_prop_p, ecma_make_string_value (prim_prop_str_value_p)); break; } #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_STRING_BUILTIN */ @@ -134,13 +134,10 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN case ECMA_BUILTIN_ID_NUMBER_PROTOTYPE: { - ecma_number_t *prim_prop_num_value_p = ecma_alloc_number (); - *prim_prop_num_value_p = ECMA_NUMBER_ZERO; - ecma_property_t *prim_value_prop_p; prim_value_prop_p = ecma_create_internal_property (object_obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); - ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (prim_value_prop_p)->value, prim_prop_num_value_p); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); + ecma_set_internal_property_value (prim_value_prop_p, ecma_make_integer_value (0)); break; } #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN */ @@ -150,8 +147,8 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */ { ecma_property_t *prim_value_prop_p; prim_value_prop_p = ecma_create_internal_property (object_obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_BOOLEAN_VALUE); - ecma_set_internal_property_value (prim_value_prop_p, ECMA_SIMPLE_VALUE_FALSE); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); + ecma_set_internal_property_value (prim_value_prop_p, ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE)); break; } #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_BOOLEAN_BUILTIN */ @@ -164,7 +161,7 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */ ecma_property_t *prim_value_prop_p; prim_value_prop_p = ecma_create_internal_property (object_obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); + ECMA_INTERNAL_PROPERTY_DATE_FLOAT); ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (prim_value_prop_p)->value, prim_prop_num_value_p); break; } diff --git a/jerry-core/ecma/operations/ecma-boolean-object.c b/jerry-core/ecma/operations/ecma-boolean-object.c index 55b4a0f00..606141d20 100644 --- a/jerry-core/ecma/operations/ecma-boolean-object.c +++ b/jerry-core/ecma/operations/ecma-boolean-object.c @@ -48,9 +48,6 @@ ecma_op_create_boolean_object (ecma_value_t arg) /**< argument passed to the Boo return conv_to_boolean_completion; } - ecma_simple_value_t bool_value = (ecma_is_value_true (conv_to_boolean_completion) ? ECMA_SIMPLE_VALUE_TRUE - : ECMA_SIMPLE_VALUE_FALSE); - #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_BOOLEAN_BUILTIN ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE); #else /* CONFIG_ECMA_COMPACT_PROFILE_DISABLE_BOOLEAN_BUILTIN */ @@ -66,8 +63,8 @@ ecma_op_create_boolean_object (ecma_value_t arg) /**< argument passed to the Boo ECMA_PROPERTY_VALUE_PTR (class_prop_p)->value = LIT_MAGIC_STRING_BOOLEAN_UL; ecma_property_t *prim_value_prop_p = ecma_create_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_BOOLEAN_VALUE); - ECMA_PROPERTY_VALUE_PTR (prim_value_prop_p)->value = bool_value; + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); + ecma_set_internal_property_value (prim_value_prop_p, conv_to_boolean_completion); return ecma_make_object_value (obj_p); } /* ecma_op_create_boolean_object */ diff --git a/jerry-core/ecma/operations/ecma-number-object.c b/jerry-core/ecma/operations/ecma-number-object.c index 69d619bfd..da83d9447 100644 --- a/jerry-core/ecma/operations/ecma-number-object.c +++ b/jerry-core/ecma/operations/ecma-number-object.c @@ -48,8 +48,6 @@ ecma_op_create_number_object (ecma_value_t arg) /**< argument passed to the Numb return conv_to_num_completion; } - ecma_number_t prim_value = ecma_get_number_from_value (conv_to_num_completion); - #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_NUMBER_PROTOTYPE); #else /* CONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN */ @@ -65,12 +63,11 @@ ecma_op_create_number_object (ecma_value_t arg) /**< argument passed to the Numb ECMA_PROPERTY_VALUE_PTR (class_prop_p)->value = LIT_MAGIC_STRING_NUMBER_UL; ecma_property_t *prim_value_prop_p = ecma_create_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); - ecma_number_t *prim_value_p = ecma_alloc_number (); - *prim_value_p = prim_value; - ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (prim_value_prop_p)->value, prim_value_p); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); + + /* Pass reference (no need to free conv_to_num_completion). */ + ecma_set_internal_property_value (prim_value_prop_p, conv_to_num_completion); - ecma_free_value (conv_to_num_completion); return ecma_make_object_value (obj_p); } /* ecma_op_create_number_object */ diff --git a/jerry-core/ecma/operations/ecma-string-object.c b/jerry-core/ecma/operations/ecma-string-object.c index 1f496333b..f68e85e87 100644 --- a/jerry-core/ecma/operations/ecma-string-object.c +++ b/jerry-core/ecma/operations/ecma-string-object.c @@ -94,8 +94,8 @@ ecma_op_create_string_object (const ecma_value_t *arguments_list_p, /**< list of */ ecma_property_t *prim_value_prop_p = ecma_create_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE); - ECMA_SET_INTERNAL_VALUE_POINTER (ECMA_PROPERTY_VALUE_PTR (prim_value_prop_p)->value, prim_prop_str_value_p); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); + ecma_set_internal_property_value (prim_value_prop_p, ecma_make_string_value (prim_prop_str_value_p)); // 15.5.5.1 ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH); @@ -167,10 +167,9 @@ ecma_op_string_object_get_own_property (ecma_object_t *obj_p, /**< a String obje // 4. ecma_property_t *prim_value_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); ecma_string_t *prim_value_str_p; - prim_value_str_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_string_t, - ECMA_PROPERTY_VALUE_PTR (prim_value_prop_p)->value); + prim_value_str_p = ecma_get_string_from_value (ecma_get_internal_property_value (prim_value_prop_p)); // 6. ecma_length_t length = ecma_string_get_length (prim_value_str_p); @@ -235,10 +234,9 @@ ecma_op_string_list_lazy_property_names (ecma_object_t *obj_p, /**< a String obj (void) for_non_enumerable_p; ecma_property_t *prim_value_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_PRIMITIVE_STRING_VALUE); + ECMA_INTERNAL_PROPERTY_ECMA_VALUE); ecma_string_t *prim_value_str_p; - prim_value_str_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_string_t, - ECMA_PROPERTY_VALUE_PTR (prim_value_prop_p)->value); + prim_value_str_p = ecma_get_string_from_value (ecma_get_internal_property_value (prim_value_prop_p)); ecma_length_t length = ecma_string_get_length (prim_value_str_p);