@@ -259,29 +259,43 @@ ecma_new_ecma_string_from_number (ecma_number_t num) /**< ecma-number */
259
259
return ecma_new_ecma_string_from_uint32 (uint32_num );
260
260
}
261
261
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 ))
267
263
{
268
- return ecma_get_magic_string (magic_string_id );
264
+ return ecma_get_magic_string (LIT_MAGIC_STRING_NAN );
269
265
}
270
266
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 ))
273
268
{
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 );
275
272
}
276
273
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
285
+
277
286
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 ;
279
287
string_desc_p -> hash = lit_utf8_string_calc_hash (str_buf , str_size );
280
288
281
289
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 );
285
299
286
300
return string_desc_p ;
287
301
} /* ecma_new_ecma_string_from_number */
@@ -440,15 +454,6 @@ ecma_copy_ecma_string (ecma_string_t *string_desc_p) /**< string descriptor */
440
454
break ;
441
455
}
442
456
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
-
452
457
case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING :
453
458
{
454
459
new_str_p = ecma_alloc_string ();
@@ -565,15 +570,6 @@ ecma_deref_ecma_string (ecma_string_t *string_p) /**< ecma-string */
565
570
566
571
break ;
567
572
}
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
- }
577
573
case ECMA_STRING_CONTAINER_LIT_TABLE :
578
574
case ECMA_STRING_CONTAINER_UINT32_IN_DESC :
579
575
case ECMA_STRING_CONTAINER_MAGIC_STRING :
@@ -604,14 +600,6 @@ ecma_string_to_number (const ecma_string_t *str_p) /**< ecma-string */
604
600
return ((ecma_number_t ) uint32_number );
605
601
}
606
602
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
-
615
603
case ECMA_STRING_CONTAINER_LIT_TABLE :
616
604
case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING :
617
605
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
722
710
size = ecma_uint32_to_utf8_string (uint32_number , buffer_p , buffer_size );
723
711
break ;
724
712
}
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
- }
732
713
case ECMA_STRING_CONTAINER_MAGIC_STRING :
733
714
{
734
715
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 */
862
843
result_p = data_p ;
863
844
break ;
864
845
}
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
- }
876
846
case ECMA_STRING_CONTAINER_UINT32_IN_DESC :
877
847
{
878
848
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
953
923
}
954
924
default :
955
925
{
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
958
927
|| ECMA_STRING_GET_CONTAINER (string1_p ) == ECMA_STRING_CONTAINER_HEAP_ASCII_STRING );
959
928
break ;
960
929
}
@@ -980,20 +949,6 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
980
949
{
981
950
switch (ECMA_STRING_GET_CONTAINER (string1_p ))
982
951
{
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
- }
997
952
case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING :
998
953
{
999
954
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 */
1292
1247
{
1293
1248
return ecma_string_get_number_in_desc_size (string_p -> u .uint32_number );
1294
1249
}
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
- }
1299
1250
case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING :
1300
1251
{
1301
1252
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 */
1340
1291
{
1341
1292
return (lit_utf8_size_t ) ecma_string_get_number_in_desc_size (string_p -> u .uint32_number );
1342
1293
}
1343
- case ECMA_STRING_CONTAINER_HEAP_NUMBER :
1344
- {
1345
- return ecma_string_get_heap_number_size (string_p -> u .number_cp );
1346
- }
1347
1294
case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING :
1348
1295
{
1349
1296
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 */
1392
1339
lit_utf8_size_t sz = ecma_string_to_utf8_string (string_p , utf8_str_p , buffer_size );
1393
1340
JERRY_ASSERT (sz == buffer_size );
1394
1341
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 );
1397
1343
/* Both above must be ascii strings. */
1398
1344
JERRY_ASSERT (is_ascii );
1399
1345
0 commit comments