Implement Symbol.matchAll (#4082)

The following methods were implemented:
- String.prototype.matchAll based on ECMA-262 v11, 21.1.3.12
- RegExp.prototype[@@matchAll] based on ECMA-262 v11, 21.2.5.8
- RegExp String Iterator Object based on 21.2.7

JerryScript-DCO-1.0-Signed-off-by: Adam Szilagyi aszilagy@inf.u-szeged.hu
This commit is contained in:
Szilagyi Adam
2021-01-18 18:08:35 +01:00
committed by GitHub
parent 1d42d17ab6
commit 6ec4455111
24 changed files with 965 additions and 83 deletions
+33
View File
@@ -981,3 +981,36 @@ lit_char_fold_to_upper (lit_code_point_t cp) /**< code point */
#endif /* ENABLED (JERRY_UNICODE_CASE_CONVERSION) */
} /* lit_char_fold_to_upper */
#endif /* ENABLED (JERRY_ESNEXT) */
/**
* Helper method to find a specific character in a string
*
* Used by:
* ecma_builtin_string_prototype_object_replace_helper
*
* @return true - if the given character is in the string
* false - otherwise
*/
bool
lit_find_char_in_string (ecma_string_t *str_p, /**< source string */
lit_utf8_byte_t c) /**< character to find*/
{
ECMA_STRING_TO_UTF8_STRING (str_p, start_p, start_size);
const lit_utf8_byte_t *str_curr_p = start_p;
const lit_utf8_byte_t *str_end_p = start_p + start_size;
bool have_char = false;
while (str_curr_p < str_end_p)
{
if (*str_curr_p++ == c)
{
have_char = true;
break;
}
}
ECMA_FINALIZE_UTF8_STRING (start_p, start_size);
return have_char;
} /* lit_find_char_in_string */
+1
View File
@@ -231,6 +231,7 @@ size_t lit_code_point_get_cesu8_length (lit_code_point_t code_point);
void lit_four_byte_utf8_char_to_cesu8 (uint8_t *dst_p, const uint8_t *source_p);
uint32_t lit_char_hex_lookup (const lit_utf8_byte_t *buf_p, const lit_utf8_byte_t *const buf_end_p, uint32_t lookup);
uint32_t lit_parse_decimal (const lit_utf8_byte_t **buffer_p, const lit_utf8_byte_t *const buffer_end_p);
bool lit_find_char_in_string (ecma_string_t *str_p, lit_utf8_byte_t c);
/**
* Null character
+2 -1
View File
@@ -55,7 +55,8 @@ typedef enum
LIT_GLOBAL_SYMBOL_TO_PRIMITIVE, /**< @@toPrimitive well known symbol */
LIT_GLOBAL_SYMBOL_TO_STRING_TAG, /**< @@toStringTag well known symbol */
LIT_GLOBAL_SYMBOL_UNSCOPABLES, /**< @@unscopables well known symbol */
LIT_GLOBAL_SYMBOL__LAST = LIT_GLOBAL_SYMBOL_UNSCOPABLES, /**< last global symbol */
LIT_GLOBAL_SYMBOL_MATCH_ALL, /**< @@matchAll well known symbol */
LIT_GLOBAL_SYMBOL__LAST = LIT_GLOBAL_SYMBOL_MATCH_ALL, /**< last global symbol */
LIT_INTERNAL_MAGIC_STRING_DELETED, /**< special value for deleted properties */
LIT_INTERNAL_MAGIC_STRING_INTERNAL_OBJECT, /**< Internal object ID for internal properties */
+4 -1
View File
@@ -585,6 +585,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IS_FROZEN_UL, "isFrozen")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IS_SEALED_UL, "isSealed")
#if ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ITERATOR, "iterator")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_MATCH_ALL, "matchAll")
#endif
#if ENABLED (JERRY_BUILTIN_STRING) && ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_PAD_START, "padStart")
@@ -661,7 +662,8 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_UINT32_UL, "getUint32")
#if ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IS_INTEGER, "isInteger")
#endif
#if ENABLED (JERRY_BUILTIN_REGEXP)
#if ENABLED (JERRY_BUILTIN_REGEXP) \
|| ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LASTINDEX_UL, "lastIndex")
#endif
#if !ENABLED (JERRY_ESNEXT) && ENABLED (JERRY_BUILTIN_REGEXP) \
@@ -978,6 +980,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_PROPERTY_IS_ENUMERABLE_UL, "propertyIsEnu
#if ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_OWN_PROPERTY_SYMBOLS_UL, "getOwnPropertySymbols")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ASYNC_GENERATOR_FUNCTION_UL, "AsyncGeneratorFunction")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_REGEXP_STRING_ITERATOR_UL, "RegExp String Iterator")
#endif
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_OWN_PROPERTY_DESCRIPTOR_UL, "getOwnPropertyDescriptor")
#if ENABLED (JERRY_ESNEXT)
+2
View File
@@ -219,6 +219,7 @@ LIT_MAGIC_STRING_RUNNABLE_UL = "Runnable"
LIT_MAGIC_STRING_DATAVIEW_UL = "DataView"
LIT_MAGIC_STRING_FUNCTION_UL = "Function"
LIT_MAGIC_STRING_INFINITY_UL = "Infinity"
LIT_MAGIC_STRING_MATCH_ALL = "matchAll"
LIT_MAGIC_STRING_URI_ERROR_UL = "URIError"
LIT_MAGIC_STRING_ENDS_WITH = "endsWith"
LIT_MAGIC_STRING_FUNCTION = "function"
@@ -394,6 +395,7 @@ LIT_MAGIC_STRING_TO_LOCALE_TIME_STRING_UL = "toLocaleTimeString"
LIT_MAGIC_STRING_GET_OWN_PROPERTY_NAMES_UL = "getOwnPropertyNames"
LIT_MAGIC_STRING_PROPERTY_IS_ENUMERABLE_UL = "propertyIsEnumerable"
LIT_MAGIC_STRING_GET_OWN_PROPERTY_SYMBOLS_UL = "getOwnPropertySymbols"
LIT_MAGIC_STRING_REGEXP_STRING_ITERATOR_UL = "RegExp String Iterator"
LIT_MAGIC_STRING_ASYNC_GENERATOR_FUNCTION_UL = "AsyncGeneratorFunction"
LIT_MAGIC_STRING_GET_OWN_PROPERTY_DESCRIPTOR_UL = "getOwnPropertyDescriptor"
LIT_MAGIC_STRING_GET_OWN_PROPERTY_DESCRIPTORS_UL = "getOwnPropertyDescriptors"