Implement String.fromCodePoint method (#3281)
The algorithm is based on ECMA-262 v6, 21.1.2.2 JerryScript-DCO-1.0-Signed-off-by: Adam Szilagyi aszilagy@inf.u-szeged.hu
This commit is contained in:
committed by
Robert Fancsik
parent
e1fc90db0e
commit
35d9b1ab17
@@ -684,6 +684,11 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IS_EXTENSIBLE, "isExtensible")
|
||||
#if ENABLED (JERRY_BUILTIN_DATE)
|
||||
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_DATE_STRING_UL, "toDateString")
|
||||
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_TIME_STRING_UL, "toTimeString")
|
||||
#endif
|
||||
#if ENABLED (JERRY_BUILTIN_STRING) && ENABLED (JERRY_ES2015_BUILTIN)
|
||||
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FROM_CODE_POINT_UL, "fromCodePoint")
|
||||
#endif
|
||||
#if ENABLED (JERRY_BUILTIN_DATE)
|
||||
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_UTC_MINUTES_UL, "getUTCMinutes")
|
||||
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_UTC_SECONDS_UL, "getUTCSeconds")
|
||||
#endif
|
||||
@@ -848,7 +853,9 @@ LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (12, LIT_MAGIC_STRING_SET_ITERATOR_UL)
|
||||
#else
|
||||
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (12, LIT_MAGIC_STRING_CONFIGURABLE)
|
||||
#endif
|
||||
#if ENABLED (JERRY_BUILTIN_DATE)
|
||||
#if ENABLED (JERRY_BUILTIN_STRING) && ENABLED (JERRY_ES2015_BUILTIN)
|
||||
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (13, LIT_MAGIC_STRING_FROM_CODE_POINT_UL)
|
||||
#elif ENABLED (JERRY_BUILTIN_DATE)
|
||||
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (13, LIT_MAGIC_STRING_GET_UTC_MINUTES_UL)
|
||||
#else
|
||||
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (13, LIT_MAGIC_STRING_IS_PROTOTYPE_OF_UL)
|
||||
|
||||
@@ -286,6 +286,7 @@ LIT_MAGIC_STRING_SET_ITERATOR_UL = "Set Iterator"
|
||||
LIT_MAGIC_STRING_MAP_ITERATOR_UL = "Map Iterator"
|
||||
LIT_MAGIC_STRING_CONFIGURABLE = "configurable"
|
||||
LIT_MAGIC_STRING_FROM_CHAR_CODE_UL = "fromCharCode"
|
||||
LIT_MAGIC_STRING_FROM_CODE_POINT_UL = "fromCodePoint"
|
||||
LIT_MAGIC_STRING_IS_EXTENSIBLE = "isExtensible"
|
||||
LIT_MAGIC_STRING_TO_DATE_STRING_UL = "toDateString"
|
||||
LIT_MAGIC_STRING_TO_TIME_STRING_UL = "toTimeString"
|
||||
|
||||
@@ -243,6 +243,29 @@ convert_code_point_to_high_surrogate (lit_code_point_t code_point) /**< code poi
|
||||
return (LIT_UTF16_HIGH_SURROGATE_MARKER | code_unit_bits);
|
||||
} /* convert_code_point_to_high_surrogate */
|
||||
|
||||
/**
|
||||
* UTF16 Encoding method for a code point
|
||||
*
|
||||
* See also:
|
||||
* ECMA-262 v6, 10.1.1
|
||||
*
|
||||
* @return uint8_t, the number of returning code points
|
||||
*/
|
||||
uint8_t
|
||||
lit_utf16_encode_code_point (lit_code_point_t cp, /**< the code point we encode */
|
||||
ecma_char_t *cu_p) /**< result of the encoding */
|
||||
{
|
||||
if (cp <= LIT_UTF16_CODE_UNIT_MAX)
|
||||
{
|
||||
cu_p[0] = (ecma_char_t) cp;
|
||||
return 1;
|
||||
}
|
||||
|
||||
cu_p[0] = convert_code_point_to_high_surrogate (cp);
|
||||
cu_p[1] = convert_code_point_to_low_surrogate (cp);
|
||||
return 2;
|
||||
} /* lit_utf16_encode_code_point */
|
||||
|
||||
/**
|
||||
* Calculate size of a zero-terminated utf-8 string
|
||||
*
|
||||
|
||||
@@ -123,6 +123,8 @@ lit_code_point_t lit_convert_surrogate_pair_to_code_point (ecma_char_t high_surr
|
||||
bool lit_compare_utf8_strings_relational (const lit_utf8_byte_t *string1_p, lit_utf8_size_t string1_size,
|
||||
const lit_utf8_byte_t *string2_p, lit_utf8_size_t string2_size);
|
||||
|
||||
uint8_t lit_utf16_encode_code_point (lit_code_point_t cp, ecma_char_t *cu_p);
|
||||
|
||||
/* read code point from buffer */
|
||||
lit_utf8_size_t lit_read_code_point_from_utf8 (const lit_utf8_byte_t *buf_p, lit_utf8_size_t buf_size,
|
||||
lit_code_point_t *code_point);
|
||||
|
||||
Reference in New Issue
Block a user