Skip to content

Commit e606cda

Browse files
committed
Remove ECMA_STRING_CONTAINER_HEAP_NUMBER.
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
1 parent 3796987 commit e606cda

File tree

3 files changed

+30
-84
lines changed

3 files changed

+30
-84
lines changed

jerry-core/ecma/base/ecma-globals.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,6 @@ typedef enum
756756
ECMA_STRING_CONTAINER_LIT_TABLE, /**< actual data is in literal table */
757757
ECMA_STRING_CONTAINER_HEAP_ASCII_STRING, /**< actual data is on the heap as an ascii string */
758758
ECMA_STRING_CONTAINER_HEAP_UTF8_STRING, /**< actual data is on the heap as an utf-8 string */
759-
ECMA_STRING_CONTAINER_HEAP_NUMBER, /**< actual data is on the heap as a ecma_number_t */
760759
ECMA_STRING_CONTAINER_UINT32_IN_DESC, /**< actual data is UInt32-represeneted Number
761760
stored locally in the string's descriptor */
762761
ECMA_STRING_CONTAINER_MAGIC_STRING, /**< the ecma-string is equal to one of ECMA magic strings */

jerry-core/ecma/base/ecma-helpers-string.c

Lines changed: 29 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -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
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

jerry-core/lit/lit-magic-strings.inc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_INPUT, "input")
4646
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LASTINDEX_UL, "lastIndex")
4747
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NAN, "NaN")
4848
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_INFINITY_UL, "Infinity")
49+
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NEGATIVE_INFINITY_UL, "-Infinity")
4950
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_UNDEFINED_UL, "Undefined")
5051
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NULL_UL, "Null")
5152
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_OBJECT_UL, "Object")

0 commit comments

Comments
 (0)