Skip to content

Remove ECMA_STRING_CONTAINER_HEAP_NUMBER. #1105

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 30, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion jerry-core/ecma/base/ecma-globals.h
Original file line number Diff line number Diff line change
Expand Up @@ -779,7 +779,6 @@ typedef enum
ECMA_STRING_CONTAINER_LIT_TABLE, /**< actual data is in literal table */
ECMA_STRING_CONTAINER_HEAP_ASCII_STRING, /**< actual data is on the heap as an ascii string */
ECMA_STRING_CONTAINER_HEAP_UTF8_STRING, /**< actual data is on the heap as an utf-8 string */
ECMA_STRING_CONTAINER_HEAP_NUMBER, /**< actual data is on the heap as a ecma_number_t */
ECMA_STRING_CONTAINER_UINT32_IN_DESC, /**< actual data is UInt32-represeneted Number
stored locally in the string's descriptor */
ECMA_STRING_CONTAINER_MAGIC_STRING, /**< the ecma-string is equal to one of ECMA magic strings */
Expand Down
112 changes: 29 additions & 83 deletions jerry-core/ecma/base/ecma-helpers-string.c
Original file line number Diff line number Diff line change
Expand Up @@ -259,29 +259,43 @@ ecma_new_ecma_string_from_number (ecma_number_t num) /**< ecma-number */
return ecma_new_ecma_string_from_uint32 (uint32_num);
}

lit_utf8_byte_t str_buf[ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER];
lit_utf8_size_t str_size = ecma_number_to_utf8_string (num, str_buf, sizeof (str_buf));

lit_magic_string_id_t magic_string_id;
if (lit_is_utf8_string_magic (str_buf, str_size, &magic_string_id))
if (ecma_number_is_nan (num))
{
return ecma_get_magic_string (magic_string_id);
return ecma_get_magic_string (LIT_MAGIC_STRING_NAN);
}

lit_magic_string_ex_id_t magic_string_ex_id;
if (lit_is_ex_utf8_string_magic (str_buf, str_size, &magic_string_ex_id))
if (ecma_number_is_infinity (num))
{
return ecma_get_magic_string_ex (magic_string_ex_id);
lit_magic_string_id_t id = (ecma_number_is_negative (num) ? LIT_MAGIC_STRING_NEGATIVE_INFINITY_UL
: LIT_MAGIC_STRING_INFINITY_UL);
return ecma_get_magic_string (id);
}

lit_utf8_byte_t str_buf[ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER];
lit_utf8_size_t str_size = ecma_number_to_utf8_string (num, str_buf, sizeof (str_buf));

JERRY_ASSERT (str_size > 0);
#ifndef JERRY_NDEBUG
lit_magic_string_id_t magic_string_id;
lit_magic_string_ex_id_t magic_string_ex_id;

JERRY_ASSERT (!lit_is_utf8_string_magic (str_buf, str_size, &magic_string_id)
&& !lit_is_ex_utf8_string_magic (str_buf, str_size, &magic_string_ex_id));
#endif /* !JERRY_NDEBUG */

ecma_string_t *string_desc_p = ecma_alloc_string ();
string_desc_p->refs_and_container = ECMA_STRING_CONTAINER_HEAP_NUMBER | ECMA_STRING_REF_ONE;
string_desc_p->hash = lit_utf8_string_calc_hash (str_buf, str_size);

string_desc_p->u.common_field = 0;
ecma_number_t *num_p = ecma_alloc_number ();
*num_p = num;
ECMA_SET_POINTER (string_desc_p->u.number_cp, num_p);

JERRY_ASSERT (lit_utf8_string_length (str_buf, str_size) == str_size);

string_desc_p->refs_and_container = ECMA_STRING_CONTAINER_HEAP_ASCII_STRING | ECMA_STRING_REF_ONE;
lit_utf8_byte_t *data_p = (lit_utf8_byte_t *) jmem_heap_alloc_block (str_size);
string_desc_p->u.ascii_string.size = (uint16_t) str_size;

memcpy (data_p, str_buf, str_size);
ECMA_SET_NON_NULL_POINTER (string_desc_p->u.ascii_string.ascii_collection_cp, data_p);

return string_desc_p;
} /* ecma_new_ecma_string_from_number */
Expand Down Expand Up @@ -440,15 +454,6 @@ ecma_copy_ecma_string (ecma_string_t *string_desc_p) /**< string descriptor */
break;
}

case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{
ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t, string_desc_p->u.number_cp);

new_str_p = ecma_new_ecma_string_from_number (*num_p);

break;
}

case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING:
{
new_str_p = ecma_alloc_string ();
Expand Down Expand Up @@ -565,15 +570,6 @@ ecma_deref_ecma_string (ecma_string_t *string_p) /**< ecma-string */

break;
}
case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{
ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t,
string_p->u.number_cp);

ecma_dealloc_number (num_p);

break;
}
case ECMA_STRING_CONTAINER_LIT_TABLE:
case ECMA_STRING_CONTAINER_UINT32_IN_DESC:
case ECMA_STRING_CONTAINER_MAGIC_STRING:
Expand Down Expand Up @@ -604,14 +600,6 @@ ecma_string_to_number (const ecma_string_t *str_p) /**< ecma-string */
return ((ecma_number_t) uint32_number);
}

case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{
ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t,
str_p->u.number_cp);

return *num_p;
}

case ECMA_STRING_CONTAINER_LIT_TABLE:
case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING:
case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING:
Expand Down Expand Up @@ -722,13 +710,6 @@ ecma_string_to_utf8_string (const ecma_string_t *string_desc_p, /**< ecma-string
size = ecma_uint32_to_utf8_string (uint32_number, buffer_p, buffer_size);
break;
}
case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{
const ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t,
string_desc_p->u.number_cp);
size = ecma_number_to_utf8_string (*num_p, buffer_p, buffer_size);
break;
}
case ECMA_STRING_CONTAINER_MAGIC_STRING:
{
const lit_magic_string_id_t id = string_desc_p->u.magic_string_id;
Expand Down Expand Up @@ -862,17 +843,6 @@ ecma_string_raw_chars (const ecma_string_t *string_p, /**< ecma-string */
result_p = data_p;
break;
}
case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{
size = ecma_string_get_heap_number_size (string_p->u.number_cp);

/* All numbers must be ascii strings. */
JERRY_ASSERT (ecma_string_get_length (string_p) == size);

length = size;
result_p = NULL;
break;
}
case ECMA_STRING_CONTAINER_UINT32_IN_DESC:
{
size = (lit_utf8_size_t) ecma_string_get_number_in_desc_size (string_p->u.uint32_number);
Expand Down Expand Up @@ -953,8 +923,7 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
}
default:
{
JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string1_p) == ECMA_STRING_CONTAINER_HEAP_NUMBER
|| ECMA_STRING_GET_CONTAINER (string1_p) == ECMA_STRING_CONTAINER_HEAP_UTF8_STRING
JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string1_p) == ECMA_STRING_CONTAINER_HEAP_UTF8_STRING
|| ECMA_STRING_GET_CONTAINER (string1_p) == ECMA_STRING_CONTAINER_HEAP_ASCII_STRING);
break;
}
Expand All @@ -980,20 +949,6 @@ ecma_compare_ecma_strings_longpath (const ecma_string_t *string1_p, /* ecma-stri
{
switch (ECMA_STRING_GET_CONTAINER (string1_p))
{
case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{
ecma_number_t *num1_p, *num2_p;
num1_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t, string1_p->u.number_cp);
num2_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t, string2_p->u.number_cp);

if (ecma_number_is_nan (*num1_p)
&& ecma_number_is_nan (*num2_p))
{
return true;
}

return (*num1_p == *num2_p);
}
case ECMA_STRING_CONTAINER_HEAP_UTF8_STRING:
{
const ecma_string_heap_header_t *data1_p = ECMA_GET_NON_NULL_POINTER (ecma_string_heap_header_t,
Expand Down Expand Up @@ -1292,10 +1247,6 @@ ecma_string_get_length (const ecma_string_t *string_p) /**< ecma-string */
{
return ecma_string_get_number_in_desc_size (string_p->u.uint32_number);
}
case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{
return (ecma_length_t) ecma_string_get_heap_number_size (string_p->u.number_cp);
}
case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING:
{
return (ecma_length_t) (string_p->u.ascii_string.size);
Expand Down Expand Up @@ -1340,10 +1291,6 @@ ecma_string_get_size (const ecma_string_t *string_p) /**< ecma-string */
{
return (lit_utf8_size_t) ecma_string_get_number_in_desc_size (string_p->u.uint32_number);
}
case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{
return ecma_string_get_heap_number_size (string_p->u.number_cp);
}
case ECMA_STRING_CONTAINER_HEAP_ASCII_STRING:
{
return (lit_utf8_size_t) string_p->u.ascii_string.size;
Expand Down Expand Up @@ -1392,8 +1339,7 @@ ecma_string_get_char_at_pos (const ecma_string_t *string_p, /**< ecma-string */
lit_utf8_size_t sz = ecma_string_to_utf8_string (string_p, utf8_str_p, buffer_size);
JERRY_ASSERT (sz == buffer_size);

JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string_p) == ECMA_STRING_CONTAINER_HEAP_NUMBER
|| ECMA_STRING_GET_CONTAINER (string_p) == ECMA_STRING_CONTAINER_UINT32_IN_DESC);
JERRY_ASSERT (ECMA_STRING_GET_CONTAINER (string_p) == ECMA_STRING_CONTAINER_UINT32_IN_DESC);
/* Both above must be ascii strings. */
JERRY_ASSERT (is_ascii);

Expand Down
1 change: 1 addition & 0 deletions jerry-core/lit/lit-magic-strings.inc.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_INPUT, "input")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LASTINDEX_UL, "lastIndex")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NAN, "NaN")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_INFINITY_UL, "Infinity")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NEGATIVE_INFINITY_UL, "-Infinity")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_UNDEFINED_UL, "Undefined")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NULL_UL, "Null")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_OBJECT_UL, "Object")
Expand Down