@@ -259,29 +259,43 @@ ecma_new_ecma_string_from_number (ecma_number_t num) /**< ecma-number */
259259 return ecma_new_ecma_string_from_uint32 (uint32_num );
260260 }
261261
262- lit_utf8_byte_t str_buf [ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER ];
263- lit_utf8_size_t str_size = ecma_number_to_utf8_string (num , str_buf , sizeof (str_buf ));
264-
265- lit_magic_string_id_t magic_string_id ;
266- if (lit_is_utf8_string_magic (str_buf , str_size , & magic_string_id ))
262+ if (ecma_number_is_nan (num ))
267263 {
268- return ecma_get_magic_string (magic_string_id );
264+ return ecma_get_magic_string (LIT_MAGIC_STRING_NAN );
269265 }
270266
271- lit_magic_string_ex_id_t magic_string_ex_id ;
272- if (lit_is_ex_utf8_string_magic (str_buf , str_size , & magic_string_ex_id ))
267+ if (ecma_number_is_infinity (num ))
273268 {
274- return ecma_get_magic_string_ex (magic_string_ex_id );
269+ lit_magic_string_id_t id = (ecma_number_is_negative (num ) ? LIT_MAGIC_STRING_NEGATIVE_INFINITY_UL
270+ : LIT_MAGIC_STRING_INFINITY_UL );
271+ return ecma_get_magic_string (id );
275272 }
276273
274+ lit_utf8_byte_t str_buf [ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER ];
275+ lit_utf8_size_t str_size = ecma_number_to_utf8_string (num , str_buf , sizeof (str_buf ));
276+
277+ JERRY_ASSERT (str_size > 0 );
278+ #ifndef JERRY_NDEBUG
279+ lit_magic_string_id_t magic_string_id ;
280+ lit_magic_string_ex_id_t magic_string_ex_id ;
281+
282+ JERRY_ASSERT (!lit_is_utf8_string_magic (str_buf , str_size , & magic_string_id )
283+ && !lit_is_ex_utf8_string_magic (str_buf , str_size , & magic_string_ex_id ));
284+ #endif /* !JERRY_NDEBUG */
285+
277286 ecma_string_t * string_desc_p = ecma_alloc_string ();
278- string_desc_p -> refs_and_container = ECMA_STRING_CONTAINER_HEAP_NUMBER | ECMA_STRING_REF_ONE ;
279287 string_desc_p -> hash = lit_utf8_string_calc_hash (str_buf , str_size );
280288
281289 string_desc_p -> u .common_field = 0 ;
282- ecma_number_t * num_p = ecma_alloc_number ();
283- * num_p = num ;
284- ECMA_SET_POINTER (string_desc_p -> u .number_cp , num_p );
290+
291+ JERRY_ASSERT (lit_utf8_string_length (str_buf , str_size ) == str_size );
292+
293+ string_desc_p -> refs_and_container = ECMA_STRING_CONTAINER_HEAP_ASCII_STRING | ECMA_STRING_REF_ONE ;
294+ lit_utf8_byte_t * data_p = (lit_utf8_byte_t * ) jmem_heap_alloc_block (str_size );
295+ string_desc_p -> u .ascii_string .size = (uint16_t ) str_size ;
296+
297+ memcpy (data_p , str_buf , str_size );
298+ ECMA_SET_NON_NULL_POINTER (string_desc_p -> u .ascii_string .ascii_collection_cp , data_p );
285299
286300 return string_desc_p ;
287301} /* ecma_new_ecma_string_from_number */
@@ -440,15 +454,6 @@ ecma_copy_ecma_string (ecma_string_t *string_desc_p) /**< string descriptor */
440454 break ;
441455 }
442456
443- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
444- {
445- ecma_number_t * num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t , string_desc_p -> u .number_cp );
446-
447- new_str_p = ecma_new_ecma_string_from_number (* num_p );
448-
449- break ;
450- }
451-
452457 case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING :
453458 {
454459 new_str_p = ecma_alloc_string ();
@@ -565,15 +570,6 @@ ecma_deref_ecma_string (ecma_string_t *string_p) /**< ecma-string */
565570
566571 break ;
567572 }
568- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
569- {
570- ecma_number_t * num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t ,
571- string_p -> u .number_cp );
572-
573- ecma_dealloc_number (num_p );
574-
575- break ;
576- }
577573 case ECMA_STRING_CONTAINER_LIT_TABLE :
578574 case ECMA_STRING_CONTAINER_UINT32_IN_DESC :
579575 case ECMA_STRING_CONTAINER_MAGIC_STRING :
@@ -604,14 +600,6 @@ ecma_string_to_number (const ecma_string_t *str_p) /**< ecma-string */
604600 return ((ecma_number_t ) uint32_number );
605601 }
606602
607- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
608- {
609- ecma_number_t * num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t ,
610- str_p -> u .number_cp );
611-
612- return * num_p ;
613- }
614-
615603 case ECMA_STRING_CONTAINER_LIT_TABLE :
616604 case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING :
617605 case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING :
@@ -722,13 +710,6 @@ ecma_string_to_utf8_string (const ecma_string_t *string_desc_p, /**< ecma-string
722710 size = ecma_uint32_to_utf8_string (uint32_number , buffer_p , buffer_size );
723711 break ;
724712 }
725- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
726- {
727- const ecma_number_t * num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t ,
728- string_desc_p -> u .number_cp );
729- size = ecma_number_to_utf8_string (* num_p , buffer_p , buffer_size );
730- break ;
731- }
732713 case ECMA_STRING_CONTAINER_MAGIC_STRING :
733714 {
734715 const lit_magic_string_id_t id = string_desc_p -> u .magic_string_id ;
@@ -862,17 +843,6 @@ ecma_string_raw_chars (const ecma_string_t *string_p, /**< ecma-string */
862843 result_p = data_p ;
863844 break ;
864845 }
865- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
866- {
867- size = ecma_string_get_heap_number_size (string_p -> u .number_cp );
868-
869- /* All numbers must be ascii strings. */
870- JERRY_ASSERT (ecma_string_get_length (string_p ) == size );
871-
872- length = size ;
873- result_p = NULL ;
874- break ;
875- }
876846 case ECMA_STRING_CONTAINER_UINT32_IN_DESC :
877847 {
878848 size = (lit_utf8_size_t ) ecma_string_get_number_in_desc_size (string_p -> u .uint32_number );
@@ -953,8 +923,7 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
953923 }
954924 default :
955925 {
956- JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string1_p ) == ECMA_STRING_CONTAINER_HEAP_NUMBER
957- || ECMA_STRING_GET_CONTAINER (string1_p ) == ECMA_STRING_CONTAINER_HEAP_UTF8_STRING
926+ JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string1_p ) == ECMA_STRING_CONTAINER_HEAP_UTF8_STRING
958927 || ECMA_STRING_GET_CONTAINER (string1_p ) == ECMA_STRING_CONTAINER_HEAP_ASCII_STRING );
959928 break ;
960929 }
@@ -980,20 +949,6 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
980949 {
981950 switch (ECMA_STRING_GET_CONTAINER (string1_p ))
982951 {
983- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
984- {
985- ecma_number_t * num1_p , * num2_p ;
986- num1_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t , string1_p -> u .number_cp );
987- num2_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t , string2_p -> u .number_cp );
988-
989- if (ecma_number_is_nan (* num1_p )
990- && ecma_number_is_nan (* num2_p ))
991- {
992- return true;
993- }
994-
995- return (* num1_p == * num2_p );
996- }
997952 case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING :
998953 {
999954 const ecma_string_heap_header_t * data1_p = ECMA_GET_NON_NULL_POINTER (ecma_string_heap_header_t ,
@@ -1292,10 +1247,6 @@ ecma_string_get_length (const ecma_string_t *string_p) /**< ecma-string */
12921247 {
12931248 return ecma_string_get_number_in_desc_size (string_p -> u .uint32_number );
12941249 }
1295- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
1296- {
1297- return (ecma_length_t ) ecma_string_get_heap_number_size (string_p -> u .number_cp );
1298- }
12991250 case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING :
13001251 {
13011252 return (ecma_length_t ) (string_p -> u .ascii_string .size );
@@ -1340,10 +1291,6 @@ ecma_string_get_size (const ecma_string_t *string_p) /**< ecma-string */
13401291 {
13411292 return (lit_utf8_size_t ) ecma_string_get_number_in_desc_size (string_p -> u .uint32_number );
13421293 }
1343- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
1344- {
1345- return ecma_string_get_heap_number_size (string_p -> u .number_cp );
1346- }
13471294 case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING :
13481295 {
13491296 return (lit_utf8_size_t ) string_p -> u .ascii_string .size ;
@@ -1392,8 +1339,7 @@ ecma_string_get_char_at_pos (const ecma_string_t *string_p, /**< ecma-string */
13921339 lit_utf8_size_t sz = ecma_string_to_utf8_string (string_p , utf8_str_p , buffer_size );
13931340 JERRY_ASSERT (sz == buffer_size );
13941341
1395- JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string_p ) == ECMA_STRING_CONTAINER_HEAP_NUMBER
1396- || ECMA_STRING_GET_CONTAINER (string_p ) == ECMA_STRING_CONTAINER_UINT32_IN_DESC );
1342+ JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string_p ) == ECMA_STRING_CONTAINER_UINT32_IN_DESC );
13971343 /* Both above must be ascii strings. */
13981344 JERRY_ASSERT (is_ascii );
13991345
0 commit comments