ecma_string_get_size performance improvemen

- replace if with switch

JerryScript-DCO-1.0-Signed-off-by: Xin Hu Xin.A.Hu@intel.com
This commit is contained in:
Xin Hu
2016-01-22 14:13:17 -05:00
committed by László Langó
parent 1466a5b317
commit 4062694059
+10 -13
View File
@@ -1371,24 +1371,24 @@ ecma_string_get_length (const ecma_string_t *string_p) /**< ecma-string */
lit_utf8_size_t lit_utf8_size_t
ecma_string_get_size (const ecma_string_t *string_p) /**< ecma-string */ ecma_string_get_size (const ecma_string_t *string_p) /**< ecma-string */
{ {
ecma_string_container_t container = (ecma_string_container_t) string_p->container; switch ((ecma_string_container_t) string_p->container)
{
if (container == ECMA_STRING_CONTAINER_LIT_TABLE) case ECMA_STRING_CONTAINER_LIT_TABLE:
{ {
lit_literal_t lit = lit_get_literal_by_cp (string_p->u.lit_cp); lit_literal_t lit = lit_get_literal_by_cp (string_p->u.lit_cp);
JERRY_ASSERT (RCS_RECORD_IS_CHARSET (lit)); JERRY_ASSERT (RCS_RECORD_IS_CHARSET (lit));
return lit_charset_literal_get_size (lit); return lit_charset_literal_get_size (lit);
} }
else if (container == ECMA_STRING_CONTAINER_MAGIC_STRING) case ECMA_STRING_CONTAINER_MAGIC_STRING:
{ {
return lit_get_magic_string_size (string_p->u.magic_string_id); return lit_get_magic_string_size (string_p->u.magic_string_id);
} }
else if (container == ECMA_STRING_CONTAINER_MAGIC_STRING_EX) case ECMA_STRING_CONTAINER_MAGIC_STRING_EX:
{ {
return lit_get_magic_string_ex_size (string_p->u.magic_string_ex_id); return lit_get_magic_string_ex_size (string_p->u.magic_string_ex_id);
} }
else if (container == ECMA_STRING_CONTAINER_UINT32_IN_DESC) case ECMA_STRING_CONTAINER_UINT32_IN_DESC:
{ {
const uint32_t uint32_number = string_p->u.uint32_number; const uint32_t uint32_number = string_p->u.uint32_number;
const int32_t max_uint32_len = 10; const int32_t max_uint32_len = 10;
@@ -1407,35 +1407,32 @@ ecma_string_get_size (const ecma_string_t *string_p) /**< ecma-string */
}; };
int32_t size = 1; int32_t size = 1;
while (size < max_uint32_len while (size < max_uint32_len
&& uint32_number >= nums_with_ascending_length[size]) && uint32_number >= nums_with_ascending_length[size])
{ {
size++; size++;
} }
return (lit_utf8_size_t) size; return (lit_utf8_size_t) size;
} }
else if (container == ECMA_STRING_CONTAINER_HEAP_NUMBER) case ECMA_STRING_CONTAINER_HEAP_NUMBER:
{ {
const ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t, const ecma_number_t *num_p = ECMA_GET_NON_NULL_POINTER (ecma_number_t,
string_p->u.number_cp); string_p->u.number_cp);
lit_utf8_byte_t buffer[ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER]; lit_utf8_byte_t buffer[ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER];
return ecma_number_to_utf8_string (*num_p, return ecma_number_to_utf8_string (*num_p,
buffer, buffer,
sizeof (buffer)); sizeof (buffer));
} }
else default:
{ {
JERRY_ASSERT (container == ECMA_STRING_CONTAINER_HEAP_CHUNKS); JERRY_ASSERT ((ecma_string_container_t)string_p->container == ECMA_STRING_CONTAINER_HEAP_CHUNKS);
const ecma_collection_header_t *collection_header_p = ECMA_GET_NON_NULL_POINTER (ecma_collection_header_t, const ecma_collection_header_t *collection_header_p = ECMA_GET_NON_NULL_POINTER (ecma_collection_header_t,
string_p->u.collection_cp); string_p->u.collection_cp);
return collection_header_p->unit_number; return collection_header_p->unit_number;
} }
}
} /* ecma_string_get_size */ } /* ecma_string_get_size */
/** /**