2222#include "jrt.h"
2323#include "jrt-libc-includes.h"
2424#include "lit-char-helpers.h"
25- #include "lit-literal.h"
2625#include "lit-magic-strings.h"
27- #include "lit-literal-storage.h"
28- #include "vm.h"
2926
3027/** \addtogroup ecma ECMA
3128 * @{
@@ -72,9 +69,6 @@ typedef struct
7269 uint16_t length ; /* Number of characters in the string */
7370} ecma_string_heap_header_t ;
7471
75- static void
76- ecma_init_ecma_string_from_lit_cp (ecma_string_t * string_p ,
77- lit_cpointer_t lit_index );
7872static void
7973ecma_init_ecma_string_from_magic_string_id (ecma_string_t * string_p ,
8074 lit_magic_string_id_t magic_string_id );
@@ -83,39 +77,6 @@ static void
8377ecma_init_ecma_string_from_magic_string_ex_id (ecma_string_t * string_p ,
8478 lit_magic_string_ex_id_t magic_string_ex_id );
8579
86- /**
87- * Initialize ecma-string descriptor with string described by index in literal table
88- */
89- static void
90- ecma_init_ecma_string_from_lit_cp (ecma_string_t * string_p , /**< descriptor to initialize */
91- lit_cpointer_t lit_cp ) /**< compressed pointer to literal */
92- {
93- lit_literal_t lit = lit_cpointer_decompress (lit_cp );
94-
95- if (LIT_RECORD_IS_MAGIC_STR (lit ))
96- {
97- ecma_init_ecma_string_from_magic_string_id (string_p ,
98- lit_magic_literal_get_magic_str_id (lit ));
99-
100- return ;
101- }
102-
103- if (LIT_RECORD_IS_MAGIC_STR_EX (lit ))
104- {
105- ecma_init_ecma_string_from_magic_string_ex_id (string_p ,
106- lit_magic_literal_get_magic_str_ex_id (lit ));
107- return ;
108- }
109-
110- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
111-
112- string_p -> refs_and_container = ECMA_STRING_CONTAINER_LIT_TABLE | ECMA_STRING_REF_ONE ;
113- string_p -> hash = lit_charset_literal_get_hash (lit );
114-
115- string_p -> u .common_field = 0 ;
116- string_p -> u .lit_cp = lit_cp ;
117- } /* ecma_init_ecma_string_from_lit_cp */
118-
11980/**
12081 * Initialize ecma-string descriptor with specified magic string
12182 */
@@ -320,21 +281,6 @@ ecma_new_ecma_string_from_number (ecma_number_t num) /**< ecma-number */
320281 return string_desc_p ;
321282} /* ecma_new_ecma_string_from_number */
322283
323- /**
324- * Allocate new ecma-string and fill it with reference to string literal
325- *
326- * @return pointer to ecma-string descriptor
327- */
328- ecma_string_t *
329- ecma_new_ecma_string_from_lit_cp (lit_cpointer_t lit_cp ) /**< index in the literal table */
330- {
331- ecma_string_t * string_desc_p = ecma_alloc_string ();
332-
333- ecma_init_ecma_string_from_lit_cp (string_desc_p , lit_cp );
334-
335- return string_desc_p ;
336- } /* ecma_new_ecma_string_from_lit_cp */
337-
338284/**
339285 * Allocate new ecma-string and fill it with reference to ECMA magic string
340286 *
@@ -502,14 +448,22 @@ ecma_deref_ecma_string (ecma_string_t *string_p) /**< ecma-string */
502448
503449 break ;
504450 }
505- case ECMA_STRING_CONTAINER_LIT_TABLE :
506451 case ECMA_STRING_CONTAINER_UINT32_IN_DESC :
507452 case ECMA_STRING_CONTAINER_MAGIC_STRING :
508453 case ECMA_STRING_CONTAINER_MAGIC_STRING_EX :
509454 {
510455 /* only the string descriptor itself should be freed */
511456 break ;
512457 }
458+ case ECMA_STRING_LITERAL_NUMBER :
459+ {
460+ ecma_fast_free_value (string_p -> u .lit_number );
461+ break ;
462+ }
463+ default :
464+ {
465+ JERRY_UNREACHABLE ();
466+ }
513467 }
514468
515469 ecma_dealloc_string (string_p );
@@ -532,7 +486,6 @@ ecma_string_to_number (const ecma_string_t *str_p) /**< ecma-string */
532486 return ((ecma_number_t ) uint32_number );
533487 }
534488
535- case ECMA_STRING_CONTAINER_LIT_TABLE :
536489 case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING :
537490 case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING :
538491 case ECMA_STRING_CONTAINER_MAGIC_STRING :
@@ -553,9 +506,12 @@ ecma_string_to_number (const ecma_string_t *str_p) /**< ecma-string */
553506
554507 return num ;
555508 }
556- }
557509
558- JERRY_UNREACHABLE ();
510+ default :
511+ {
512+ JERRY_UNREACHABLE ();
513+ }
514+ }
559515} /* ecma_string_to_number */
560516
561517/**
@@ -628,14 +584,6 @@ ecma_string_copy_to_utf8_buffer (const ecma_string_t *string_desc_p, /**< ecma-s
628584 memcpy (buffer_p , data_p , size );
629585 break ;
630586 }
631- case ECMA_STRING_CONTAINER_LIT_TABLE :
632- {
633- const lit_literal_t lit = lit_get_literal_by_cp (string_desc_p -> u .lit_cp );
634- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
635- size = lit_charset_literal_get_size (lit );
636- memcpy (buffer_p , lit_charset_literal_get_charset (lit ), size );
637- break ;
638- }
639587 case ECMA_STRING_CONTAINER_UINT32_IN_DESC :
640588 {
641589 const uint32_t uint32_number = string_desc_p -> u .uint32_number ;
@@ -762,16 +710,6 @@ ecma_string_raw_chars (const ecma_string_t *string_p, /**< ecma-string */
762710
763711 switch (ECMA_STRING_GET_CONTAINER (string_p ))
764712 {
765- case ECMA_STRING_CONTAINER_LIT_TABLE :
766- {
767- lit_literal_t lit = lit_get_literal_by_cp (string_p -> u .lit_cp );
768- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
769-
770- length = lit_charset_literal_get_length (lit );
771- size = lit_charset_literal_get_size (lit );
772- result_p = lit_charset_literal_get_charset (lit );
773- break ;
774- }
775713 case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING :
776714 {
777715 const ecma_string_heap_header_t * data_p = ECMA_GET_NON_NULL_POINTER (ecma_string_heap_header_t ,
@@ -861,11 +799,6 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
861799 {
862800 switch (ECMA_STRING_GET_CONTAINER (string1_p ))
863801 {
864- case ECMA_STRING_CONTAINER_LIT_TABLE :
865- {
866- JERRY_ASSERT (string1_p -> u .lit_cp != string2_p -> u .lit_cp );
867- return false;
868- }
869802 case ECMA_STRING_CONTAINER_MAGIC_STRING :
870803 {
871804 JERRY_ASSERT (string1_p -> u .magic_string_id != string2_p -> u .magic_string_id );
@@ -958,13 +891,6 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
958891
959892 utf8_string1_p = data_p ;
960893 }
961- else if (ECMA_STRING_GET_CONTAINER (string1_p ) == ECMA_STRING_CONTAINER_LIT_TABLE )
962- {
963- const lit_literal_t lit = lit_get_literal_by_cp (string1_p -> u .lit_cp );
964- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
965-
966- utf8_string1_p = (lit_utf8_byte_t * ) lit_charset_literal_get_charset (lit );
967- }
968894 else
969895 {
970896 utf8_string1_p = (lit_utf8_byte_t * ) jmem_heap_alloc_block ((size_t ) strings_size );
@@ -988,13 +914,6 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
988914
989915 utf8_string2_p = data_p ;
990916 }
991- else if (ECMA_STRING_GET_CONTAINER (string2_p ) == ECMA_STRING_CONTAINER_LIT_TABLE )
992- {
993- const lit_literal_t lit = lit_get_literal_by_cp (string2_p -> u .lit_cp );
994- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
995-
996- utf8_string2_p = (lit_utf8_byte_t * ) lit_charset_literal_get_charset (lit );
997- }
998917 else
999918 {
1000919 utf8_string2_p = (lit_utf8_byte_t * ) jmem_heap_alloc_block ((size_t ) strings_size );
@@ -1088,14 +1007,6 @@ ecma_compare_ecma_strings_relational (const ecma_string_t *string1_p, /**< ecma-
10881007 utf8_string1_p = data_p ;
10891008 utf8_string1_size = (lit_utf8_size_t ) string1_p -> u .ascii_string .size ;
10901009 }
1091- else if (ECMA_STRING_GET_CONTAINER (string1_p ) == ECMA_STRING_CONTAINER_LIT_TABLE )
1092- {
1093- const lit_literal_t lit = lit_get_literal_by_cp (string1_p -> u .lit_cp );
1094- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
1095-
1096- utf8_string1_p = (lit_utf8_byte_t * ) lit_charset_literal_get_charset (lit );
1097- utf8_string1_size = (lit_utf8_size_t ) lit_charset_literal_get_size (lit );
1098- }
10991010 else
11001011 {
11011012 utf8_string1_size = ecma_string_get_size (string1_p );
@@ -1129,14 +1040,6 @@ ecma_compare_ecma_strings_relational (const ecma_string_t *string1_p, /**< ecma-
11291040 utf8_string2_p = data_p ;
11301041 utf8_string2_size = (lit_utf8_size_t ) string2_p -> u .ascii_string .size ;
11311042 }
1132- else if (ECMA_STRING_GET_CONTAINER (string2_p ) == ECMA_STRING_CONTAINER_LIT_TABLE )
1133- {
1134- const lit_literal_t lit = lit_get_literal_by_cp (string2_p -> u .lit_cp );
1135- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
1136-
1137- utf8_string2_p = (lit_utf8_byte_t * ) lit_charset_literal_get_charset (lit );
1138- utf8_string2_size = (lit_utf8_size_t ) lit_charset_literal_get_size (lit );
1139- }
11401043 else
11411044 {
11421045 utf8_string2_size = ecma_string_get_size (string2_p );
@@ -1182,12 +1085,6 @@ ecma_string_get_length (const ecma_string_t *string_p) /**< ecma-string */
11821085{
11831086 switch (ECMA_STRING_GET_CONTAINER (string_p ))
11841087 {
1185- case ECMA_STRING_CONTAINER_LIT_TABLE :
1186- {
1187- lit_literal_t lit = lit_get_literal_by_cp (string_p -> u .lit_cp );
1188- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
1189- return lit_charset_literal_get_length (lit );
1190- }
11911088 case ECMA_STRING_CONTAINER_MAGIC_STRING :
11921089 {
11931090 JERRY_ASSERT (ECMA_STRING_IS_ASCII (lit_get_magic_string_utf8 (string_p -> u .magic_string_id ),
@@ -1229,13 +1126,6 @@ ecma_string_get_size (const ecma_string_t *string_p) /**< ecma-string */
12291126{
12301127 switch (ECMA_STRING_GET_CONTAINER (string_p ))
12311128 {
1232- case ECMA_STRING_CONTAINER_LIT_TABLE :
1233- {
1234- lit_literal_t lit = lit_get_literal_by_cp (string_p -> u .lit_cp );
1235- JERRY_ASSERT (LIT_RECORD_IS_CHARSET (lit ));
1236-
1237- return lit_charset_literal_get_size (lit );
1238- }
12391129 case ECMA_STRING_CONTAINER_MAGIC_STRING :
12401130 {
12411131 return lit_get_magic_string_size (string_p -> u .magic_string_id );
0 commit comments