mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Merge external direct magic strings into direct magic strings (#2766)
JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
parent
6efdb283aa
commit
f23c746b45
@ -654,6 +654,8 @@ someplace_in_the_code (void)
|
||||
Registers an external magic string array.
|
||||
|
||||
*Note*: The strings in the array must be sorted by size at first, then lexicographically.
|
||||
*Note*: The maximum number of external magic strings is limited to 2147483648 (UINT32_MAX / 2).
|
||||
If there are more than 2147483648 external magic strings the extra is cropped.
|
||||
|
||||
**Prototype**
|
||||
|
||||
|
||||
@ -1272,7 +1272,6 @@ typedef enum
|
||||
ECMA_DIRECT_STRING_PTR = 0, /**< string is a string pointer, only used by property names */
|
||||
ECMA_DIRECT_STRING_MAGIC = 1, /**< string is a magic string */
|
||||
ECMA_DIRECT_STRING_UINT = 2, /**< string is an unsigned int */
|
||||
ECMA_DIRECT_STRING_MAGIC_EX = 3, /**< string is an extended magic string */
|
||||
} ecma_direct_string_type_t;
|
||||
|
||||
/**
|
||||
|
||||
@ -47,8 +47,7 @@ JERRY_STATIC_ASSERT ((ECMA_TYPE_DIRECT_STRING & 0x1) != 0,
|
||||
JERRY_STATIC_ASSERT (LIT_MAGIC_STRING__COUNT <= ECMA_DIRECT_STRING_MAX_IMM,
|
||||
all_magic_strings_must_be_encoded_as_direct_string);
|
||||
|
||||
JERRY_STATIC_ASSERT ((int) ECMA_DIRECT_STRING_UINT == (int) ECMA_STRING_CONTAINER_UINT32_IN_DESC
|
||||
&& (int) ECMA_DIRECT_STRING_MAGIC_EX == (int) ECMA_STRING_CONTAINER_MAGIC_STRING_EX,
|
||||
JERRY_STATIC_ASSERT ((int) ECMA_DIRECT_STRING_UINT == (int) ECMA_STRING_CONTAINER_UINT32_IN_DESC,
|
||||
ecma_direct_and_container_types_must_match);
|
||||
|
||||
JERRY_STATIC_ASSERT (ECMA_PROPERTY_NAME_TYPE_SHIFT > ECMA_VALUE_SHIFT,
|
||||
@ -135,18 +134,19 @@ ecma_string_get_chars_fast (const ecma_string_t *string_p, /**< ecma-string */
|
||||
{
|
||||
if (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC)
|
||||
{
|
||||
lit_magic_string_id_t id = (lit_magic_string_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
|
||||
if (id >= LIT_MAGIC_STRING__COUNT)
|
||||
{
|
||||
id -= LIT_MAGIC_STRING__COUNT;
|
||||
|
||||
*size_p = lit_get_magic_string_ex_size (id);
|
||||
return lit_get_magic_string_ex_utf8 (id);
|
||||
}
|
||||
|
||||
*size_p = lit_get_magic_string_size (id);
|
||||
return lit_get_magic_string_utf8 (id);
|
||||
}
|
||||
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
|
||||
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
|
||||
*size_p = lit_get_magic_string_ex_size (id);
|
||||
return lit_get_magic_string_ex_utf8 (id);
|
||||
}
|
||||
|
||||
JERRY_ASSERT (string_p->refs_and_container >= ECMA_STRING_REF_ONE);
|
||||
@ -184,9 +184,11 @@ ecma_new_ecma_string_from_magic_string_ex_id (lit_magic_string_ex_id_t id) /**<
|
||||
{
|
||||
JERRY_ASSERT (id < lit_get_magic_string_ex_count ());
|
||||
|
||||
if (JERRY_LIKELY (id <= ECMA_DIRECT_STRING_MAX_IMM))
|
||||
uintptr_t string_id = (uintptr_t) (id + LIT_MAGIC_STRING__COUNT);
|
||||
|
||||
if (JERRY_LIKELY (string_id <= ECMA_DIRECT_STRING_MAX_IMM))
|
||||
{
|
||||
return (ecma_string_t *) ECMA_CREATE_DIRECT_STRING (ECMA_DIRECT_STRING_MAGIC_EX, (uintptr_t) id);
|
||||
return (ecma_string_t *) ECMA_CREATE_DIRECT_STRING (ECMA_DIRECT_STRING_MAGIC, string_id);
|
||||
}
|
||||
|
||||
ecma_string_t *string_desc_p = ecma_alloc_string ();
|
||||
@ -578,14 +580,27 @@ ecma_append_chars_to_string (ecma_string_t *string1_p, /**< base ecma-string */
|
||||
{
|
||||
case ECMA_DIRECT_STRING_MAGIC:
|
||||
{
|
||||
lit_magic_string_id_t id = (lit_magic_string_id_t) ECMA_GET_DIRECT_STRING_VALUE (string1_p);
|
||||
cesu8_string1_p = lit_get_magic_string_utf8 (id);
|
||||
cesu8_string1_size = lit_get_magic_string_size (id);
|
||||
cesu8_string1_length = cesu8_string1_size;
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string1_p);
|
||||
|
||||
if (id >= LIT_MAGIC_STRING__COUNT)
|
||||
{
|
||||
id -= LIT_MAGIC_STRING__COUNT;
|
||||
cesu8_string1_p = lit_get_magic_string_ex_utf8 (id);
|
||||
cesu8_string1_size = lit_get_magic_string_ex_size (id);
|
||||
cesu8_string1_length = lit_utf8_string_length (cesu8_string1_p, cesu8_string1_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
cesu8_string1_p = lit_get_magic_string_utf8 (id);
|
||||
cesu8_string1_size = lit_get_magic_string_size (id);
|
||||
cesu8_string1_length = cesu8_string1_size;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ECMA_DIRECT_STRING_UINT:
|
||||
default:
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string1_p) == ECMA_DIRECT_STRING_UINT);
|
||||
cesu8_string1_size = ecma_uint32_to_utf8_string ((uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string1_p),
|
||||
uint32_to_string_buffer,
|
||||
ECMA_MAX_CHARS_IN_STRINGIFIED_UINT32);
|
||||
@ -594,16 +609,6 @@ ecma_append_chars_to_string (ecma_string_t *string1_p, /**< base ecma-string */
|
||||
string1_is_uint32 = true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string1_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
|
||||
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string1_p);
|
||||
cesu8_string1_p = lit_get_magic_string_ex_utf8 (id);
|
||||
cesu8_string1_size = lit_get_magic_string_ex_size (id);
|
||||
cesu8_string1_length = lit_utf8_string_length (cesu8_string1_p, cesu8_string1_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -791,14 +796,26 @@ ecma_concat_ecma_strings (ecma_string_t *string1_p, /**< first ecma-string */
|
||||
{
|
||||
case ECMA_DIRECT_STRING_MAGIC:
|
||||
{
|
||||
lit_magic_string_id_t id = (lit_magic_string_id_t) ECMA_GET_DIRECT_STRING_VALUE (string2_p);
|
||||
cesu8_string2_p = lit_get_magic_string_utf8 (id);
|
||||
cesu8_string2_size = lit_get_magic_string_size (id);
|
||||
cesu8_string2_length = cesu8_string2_size;
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string2_p);
|
||||
|
||||
if (id >= LIT_MAGIC_STRING__COUNT)
|
||||
{
|
||||
id -= LIT_MAGIC_STRING__COUNT;
|
||||
cesu8_string2_p = lit_get_magic_string_ex_utf8 (id);
|
||||
cesu8_string2_size = lit_get_magic_string_ex_size (id);
|
||||
cesu8_string2_length = lit_utf8_string_length (cesu8_string2_p, cesu8_string2_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
cesu8_string2_p = lit_get_magic_string_utf8 (id);
|
||||
cesu8_string2_size = lit_get_magic_string_size (id);
|
||||
cesu8_string2_length = cesu8_string2_size;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ECMA_DIRECT_STRING_UINT:
|
||||
default:
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string2_p) == ECMA_DIRECT_STRING_UINT);
|
||||
cesu8_string2_size = ecma_uint32_to_utf8_string ((uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string2_p),
|
||||
uint32_to_string_buffer,
|
||||
ECMA_MAX_CHARS_IN_STRINGIFIED_UINT32);
|
||||
@ -806,16 +823,6 @@ ecma_concat_ecma_strings (ecma_string_t *string1_p, /**< first ecma-string */
|
||||
cesu8_string2_length = cesu8_string2_size;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string2_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
|
||||
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string2_p);
|
||||
cesu8_string2_p = lit_get_magic_string_ex_utf8 (id);
|
||||
cesu8_string2_size = lit_get_magic_string_ex_size (id);
|
||||
cesu8_string2_length = lit_utf8_string_length (cesu8_string2_p, cesu8_string2_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1462,19 +1469,35 @@ ecma_string_get_chars (const ecma_string_t *string_p, /**< ecma-string */
|
||||
{
|
||||
case ECMA_DIRECT_STRING_MAGIC:
|
||||
{
|
||||
lit_magic_string_id_t id = (lit_magic_string_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
|
||||
size = lit_get_magic_string_size (id);
|
||||
length = size;
|
||||
if (id >= LIT_MAGIC_STRING__COUNT)
|
||||
{
|
||||
id -= LIT_MAGIC_STRING__COUNT;
|
||||
size = lit_get_magic_string_ex_size (id);
|
||||
result_p = lit_get_magic_string_ex_utf8 (id);
|
||||
length = 0;
|
||||
|
||||
result_p = lit_get_magic_string_utf8 (id);
|
||||
if (JERRY_UNLIKELY (*flags_p & ECMA_STRING_FLAG_IS_ASCII))
|
||||
{
|
||||
length = lit_utf8_string_length (result_p, size);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
size = lit_get_magic_string_size (id);
|
||||
length = size;
|
||||
|
||||
/* All magic strings must be ascii strings. */
|
||||
JERRY_ASSERT (ECMA_STRING_IS_ASCII (result_p, size));
|
||||
result_p = lit_get_magic_string_utf8 (id);
|
||||
|
||||
/* All magic strings must be ascii strings. */
|
||||
JERRY_ASSERT (ECMA_STRING_IS_ASCII (result_p, size));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ECMA_DIRECT_STRING_UINT:
|
||||
default:
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_UINT);
|
||||
uint32_t uint32_number = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
size = (lit_utf8_size_t) ecma_string_get_uint32_size (uint32_number);
|
||||
|
||||
@ -1484,22 +1507,6 @@ ecma_string_get_chars (const ecma_string_t *string_p, /**< ecma-string */
|
||||
*flags_p |= ECMA_STRING_FLAG_MUST_BE_FREED;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
|
||||
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
|
||||
size = lit_get_magic_string_ex_size (id);
|
||||
result_p = lit_get_magic_string_ex_utf8 (id);
|
||||
length = 0;
|
||||
|
||||
if (JERRY_UNLIKELY (*flags_p & ECMA_STRING_FLAG_IS_ASCII))
|
||||
{
|
||||
length = lit_utf8_string_length (result_p, size);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1673,10 +1680,6 @@ ecma_string_get_property_name_hash (ecma_property_t property, /**< property name
|
||||
ecma_string_t *prop_name_p = ECMA_GET_NON_NULL_POINTER (ecma_string_t, prop_name_cp);
|
||||
return prop_name_p->hash;
|
||||
}
|
||||
case ECMA_DIRECT_STRING_MAGIC_EX:
|
||||
{
|
||||
return (lit_string_hash_t) (LIT_MAGIC_STRING__COUNT + prop_name_cp);
|
||||
}
|
||||
default:
|
||||
{
|
||||
return (lit_string_hash_t) prop_name_cp;
|
||||
@ -1984,22 +1987,23 @@ ecma_string_get_ascii_size (const ecma_string_t *string_p) /**< ecma-string */
|
||||
{
|
||||
case ECMA_DIRECT_STRING_MAGIC:
|
||||
{
|
||||
lit_magic_string_id_t id = (lit_magic_string_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
|
||||
if (id >= LIT_MAGIC_STRING__COUNT)
|
||||
{
|
||||
return ECMA_STRING_NO_ASCII_SIZE;
|
||||
}
|
||||
|
||||
JERRY_ASSERT (ECMA_STRING_IS_ASCII (lit_get_magic_string_utf8 (id),
|
||||
lit_get_magic_string_size (id)));
|
||||
|
||||
return lit_get_magic_string_size (id);
|
||||
}
|
||||
case ECMA_DIRECT_STRING_UINT:
|
||||
{
|
||||
uint32_t uint32_number = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
return ecma_string_get_uint32_size (uint32_number);
|
||||
}
|
||||
default:
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
|
||||
return ECMA_STRING_NO_ASCII_SIZE;
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_UINT);
|
||||
uint32_t uint32_number = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
return ecma_string_get_uint32_size (uint32_number);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2031,9 +2035,10 @@ ecma_string_get_length (const ecma_string_t *string_p) /**< ecma-string */
|
||||
|
||||
if (ECMA_IS_DIRECT_STRING (string_p))
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC);
|
||||
JERRY_ASSERT ((uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p) >= LIT_MAGIC_STRING__COUNT);
|
||||
|
||||
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p) - LIT_MAGIC_STRING__COUNT;
|
||||
return lit_utf8_string_length (lit_get_magic_string_ex_utf8 (id),
|
||||
lit_get_magic_string_ex_size (id));
|
||||
}
|
||||
@ -2075,9 +2080,10 @@ ecma_string_get_utf8_length (const ecma_string_t *string_p) /**< ecma-string */
|
||||
|
||||
if (ECMA_IS_DIRECT_STRING (string_p))
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC);
|
||||
JERRY_ASSERT ((uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p) >= LIT_MAGIC_STRING__COUNT);
|
||||
|
||||
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p) - LIT_MAGIC_STRING__COUNT;
|
||||
return lit_get_utf8_length_of_cesu8_string (lit_get_magic_string_ex_utf8 (id),
|
||||
lit_get_magic_string_ex_size (id));
|
||||
}
|
||||
@ -2132,10 +2138,10 @@ ecma_string_get_size (const ecma_string_t *string_p) /**< ecma-string */
|
||||
|
||||
if (ECMA_IS_DIRECT_STRING (string_p))
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC);
|
||||
JERRY_ASSERT ((uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p) >= LIT_MAGIC_STRING__COUNT);
|
||||
|
||||
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
return lit_get_magic_string_ex_size (id);
|
||||
return lit_get_magic_string_ex_size ((uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p) - LIT_MAGIC_STRING__COUNT);
|
||||
}
|
||||
|
||||
switch (ECMA_STRING_GET_CONTAINER (string_p))
|
||||
@ -2174,9 +2180,10 @@ ecma_string_get_utf8_size (const ecma_string_t *string_p) /**< ecma-string */
|
||||
|
||||
if (ECMA_IS_DIRECT_STRING (string_p))
|
||||
{
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC_EX);
|
||||
JERRY_ASSERT (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC);
|
||||
JERRY_ASSERT ((uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p) >= LIT_MAGIC_STRING__COUNT);
|
||||
|
||||
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p) - LIT_MAGIC_STRING__COUNT;
|
||||
return lit_get_utf8_size_of_cesu8_string (lit_get_magic_string_ex_utf8 (id),
|
||||
lit_get_magic_string_ex_size (id));
|
||||
}
|
||||
@ -2259,7 +2266,12 @@ ecma_get_string_magic (const ecma_string_t *string_p) /**< ecma-string */
|
||||
{
|
||||
if (ECMA_IS_DIRECT_STRING_WITH_TYPE (string_p, ECMA_DIRECT_STRING_MAGIC))
|
||||
{
|
||||
return (lit_magic_string_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
uint32_t id = (uint32_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
|
||||
if (id < LIT_MAGIC_STRING__COUNT)
|
||||
{
|
||||
return (lit_magic_string_id_t) id;
|
||||
}
|
||||
}
|
||||
|
||||
return LIT_MAGIC_STRING__COUNT;
|
||||
@ -2278,14 +2290,7 @@ ecma_string_hash (const ecma_string_t *string_p) /**< ecma-string to calculate h
|
||||
return (string_p->hash);
|
||||
}
|
||||
|
||||
lit_string_hash_t hash = (lit_string_hash_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
|
||||
if (ECMA_GET_DIRECT_STRING_TYPE (string_p) == ECMA_DIRECT_STRING_MAGIC_EX)
|
||||
{
|
||||
hash = (lit_string_hash_t) (hash + LIT_MAGIC_STRING__COUNT);
|
||||
}
|
||||
|
||||
return hash;
|
||||
return (lit_string_hash_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
|
||||
} /* ecma_string_hash */
|
||||
|
||||
/**
|
||||
|
||||
@ -1559,7 +1559,8 @@ ecma_op_object_get_property_names (ecma_object_t *obj_p, /**< object */
|
||||
ecma_property_pair_t *prop_pair_p = (ecma_property_pair_t *) prop_iter_p;
|
||||
|
||||
if (ECMA_PROPERTY_GET_NAME_TYPE (*property_p) == ECMA_DIRECT_STRING_MAGIC
|
||||
&& prop_pair_p->names_cp[i] >= LIT_NON_INTERNAL_MAGIC_STRING__COUNT)
|
||||
&& prop_pair_p->names_cp[i] >= LIT_NON_INTERNAL_MAGIC_STRING__COUNT
|
||||
&& prop_pair_p->names_cp[i] < LIT_MAGIC_STRING__COUNT)
|
||||
{
|
||||
/* Internal properties are never enumerated. */
|
||||
continue;
|
||||
|
||||
@ -30,7 +30,7 @@ extern "C"
|
||||
/**
|
||||
* Jerry snapshot format version.
|
||||
*/
|
||||
#define JERRY_SNAPSHOT_VERSION (21u)
|
||||
#define JERRY_SNAPSHOT_VERSION (22u)
|
||||
|
||||
/**
|
||||
* Flags for jerry_generate_snapshot and jerry_generate_function_snapshot.
|
||||
|
||||
@ -17,6 +17,11 @@
|
||||
#include "lit-magic-strings.h"
|
||||
#include "lit-strings.h"
|
||||
|
||||
/**
|
||||
* Maximum number of external magic strings that can be registered.
|
||||
*/
|
||||
#define LIT_EXTERNAL_MAGIC_STRING_LIMIT (UINT32_MAX / 2)
|
||||
|
||||
/**
|
||||
* Get number of external magic strings
|
||||
*
|
||||
@ -35,7 +40,7 @@ lit_get_magic_string_ex_count (void)
|
||||
* @return pointer to zero-terminated magic string
|
||||
*/
|
||||
const lit_utf8_byte_t *
|
||||
lit_get_magic_string_utf8 (lit_magic_string_id_t id) /**< magic string id */
|
||||
lit_get_magic_string_utf8 (uint32_t id) /**< magic string id */
|
||||
{
|
||||
static const lit_utf8_byte_t * const lit_magic_strings[] JERRY_CONST_DATA =
|
||||
{
|
||||
@ -60,7 +65,7 @@ lit_get_magic_string_utf8 (lit_magic_string_id_t id) /**< magic string id */
|
||||
* @return size in bytes
|
||||
*/
|
||||
lit_utf8_size_t
|
||||
lit_get_magic_string_size (lit_magic_string_id_t id) /**< magic string id */
|
||||
lit_get_magic_string_size (uint32_t id) /**< magic string id */
|
||||
{
|
||||
static const lit_magic_size_t lit_magic_string_sizes[] JERRY_CONST_DATA =
|
||||
{
|
||||
@ -112,7 +117,7 @@ lit_get_magic_string_size_block_start (lit_utf8_size_t size) /**< magic string s
|
||||
* @return pointer to zero-terminated magic string
|
||||
*/
|
||||
const lit_utf8_byte_t *
|
||||
lit_get_magic_string_ex_utf8 (lit_magic_string_ex_id_t id) /**< extern magic string id */
|
||||
lit_get_magic_string_ex_utf8 (uint32_t id) /**< extern magic string id */
|
||||
{
|
||||
JERRY_ASSERT (JERRY_CONTEXT (lit_magic_string_ex_array) && id < JERRY_CONTEXT (lit_magic_string_ex_count));
|
||||
|
||||
@ -125,7 +130,7 @@ lit_get_magic_string_ex_utf8 (lit_magic_string_ex_id_t id) /**< extern magic str
|
||||
* @return size in bytes
|
||||
*/
|
||||
lit_utf8_size_t
|
||||
lit_get_magic_string_ex_size (lit_magic_string_ex_id_t id) /**< external magic string id */
|
||||
lit_get_magic_string_ex_size (uint32_t id) /**< external magic string id */
|
||||
{
|
||||
return JERRY_CONTEXT (lit_magic_string_ex_sizes)[id];
|
||||
} /* lit_get_magic_string_ex_size */
|
||||
@ -147,6 +152,12 @@ lit_magic_strings_ex_set (const lit_utf8_byte_t * const *ex_str_items, /**< char
|
||||
JERRY_ASSERT (JERRY_CONTEXT (lit_magic_string_ex_count) == 0);
|
||||
JERRY_ASSERT (JERRY_CONTEXT (lit_magic_string_ex_sizes) == NULL);
|
||||
|
||||
/* Limit the number of external magic strings */
|
||||
if (count > LIT_EXTERNAL_MAGIC_STRING_LIMIT)
|
||||
{
|
||||
count = LIT_EXTERNAL_MAGIC_STRING_LIMIT;
|
||||
}
|
||||
|
||||
/* Set external magic strings information */
|
||||
JERRY_CONTEXT (lit_magic_string_ex_array) = ex_str_items;
|
||||
JERRY_CONTEXT (lit_magic_string_ex_count) = count;
|
||||
|
||||
@ -78,11 +78,11 @@ typedef uint32_t lit_magic_string_ex_id_t;
|
||||
|
||||
uint32_t lit_get_magic_string_ex_count (void);
|
||||
|
||||
const lit_utf8_byte_t *lit_get_magic_string_utf8 (lit_magic_string_id_t id);
|
||||
lit_utf8_size_t lit_get_magic_string_size (lit_magic_string_id_t id);
|
||||
const lit_utf8_byte_t *lit_get_magic_string_utf8 (uint32_t id);
|
||||
lit_utf8_size_t lit_get_magic_string_size (uint32_t id);
|
||||
|
||||
const lit_utf8_byte_t *lit_get_magic_string_ex_utf8 (lit_magic_string_ex_id_t id);
|
||||
lit_utf8_size_t lit_get_magic_string_ex_size (lit_magic_string_ex_id_t id);
|
||||
const lit_utf8_byte_t *lit_get_magic_string_ex_utf8 (uint32_t id);
|
||||
lit_utf8_size_t lit_get_magic_string_ex_size (uint32_t id);
|
||||
|
||||
void lit_magic_strings_ex_set (const lit_utf8_byte_t * const *ex_str_items,
|
||||
uint32_t count,
|
||||
|
||||
@ -223,7 +223,7 @@ main (void)
|
||||
/* Check the snapshot data. Unused bytes should be filled with zeroes */
|
||||
const uint8_t expected_data[] =
|
||||
{
|
||||
0x4A, 0x52, 0x52, 0x59, 0x15, 0x00, 0x00, 0x00,
|
||||
0x4A, 0x52, 0x52, 0x59, 0x16, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user