Implement TrimStart TrimEnd and aliases (#4102)
Based on: https://tc39.es/ecma262/#sec-string.prototype.trim JerryScript-DCO-1.0-Signed-off-by: Bela Toth tbela@inf.u-szeged.hu
This commit is contained in:
@@ -18,7 +18,9 @@
|
||||
#include "ecma-container-object.h"
|
||||
#include "ecma-array-object.h"
|
||||
#include "ecma-typedarray-object.h"
|
||||
#include "ecma-string-object.h"
|
||||
#include "ecma-gc.h"
|
||||
#include "ecma-helpers.h"
|
||||
#include "lit-char-helpers.h"
|
||||
|
||||
#if ENABLED (JERRY_ESNEXT)
|
||||
@@ -44,7 +46,9 @@ enum
|
||||
ECMA_INTRINSIC_ARRAY_TO_STRING,
|
||||
ECMA_INTRINSIC_DATE_TO_UTC_STRING,
|
||||
ECMA_INTRINSIC_PARSE_FLOAT,
|
||||
ECMA_INTRINSIC_PARSE_INT
|
||||
ECMA_INTRINSIC_PARSE_INT,
|
||||
ECMA_INTRINSIC_STRING_TRIM_START,
|
||||
ECMA_INTRINSIC_STRING_TRIM_END,
|
||||
};
|
||||
|
||||
#define BUILTIN_INC_HEADER_NAME "ecma-builtin-intrinsic.inc.h"
|
||||
@@ -206,6 +210,48 @@ ecma_builtin_intrinsic_dispatch_routine (uint16_t builtin_routine_id, /**< built
|
||||
|
||||
return ecma_date_value_to_utc_string (*prim_value_p);
|
||||
}
|
||||
case ECMA_INTRINSIC_STRING_TRIM_START:
|
||||
case ECMA_INTRINSIC_STRING_TRIM_END:
|
||||
{
|
||||
ecma_value_t coercible = ecma_op_check_object_coercible (this_arg);
|
||||
|
||||
if (ECMA_IS_VALUE_ERROR (coercible))
|
||||
{
|
||||
return coercible;
|
||||
}
|
||||
|
||||
ecma_string_t *to_str_p = ecma_op_to_string (this_arg);
|
||||
if (to_str_p == NULL)
|
||||
{
|
||||
return ECMA_VALUE_ERROR;
|
||||
}
|
||||
|
||||
ECMA_STRING_TO_UTF8_STRING (to_str_p, start_p, input_start_size);
|
||||
|
||||
lit_utf8_size_t size;
|
||||
const lit_utf8_byte_t *input_start_p = start_p;
|
||||
const lit_utf8_byte_t *input_str_end_p = start_p + input_start_size;
|
||||
|
||||
ecma_string_t *ret_str_p;
|
||||
if (builtin_routine_id == ECMA_INTRINSIC_STRING_TRIM_START)
|
||||
{
|
||||
const lit_utf8_byte_t *new_start_p = ecma_string_trim_front (input_start_p, input_str_end_p);
|
||||
size = (lit_utf8_size_t) (input_str_end_p - new_start_p);
|
||||
ret_str_p = ecma_new_ecma_string_from_utf8 (new_start_p, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
const lit_utf8_byte_t *new_end_p = ecma_string_trim_back (input_start_p, input_str_end_p);
|
||||
size = (lit_utf8_size_t) (new_end_p - input_start_p);
|
||||
ret_str_p = ecma_new_ecma_string_from_utf8 (input_start_p, size);
|
||||
}
|
||||
|
||||
ECMA_FINALIZE_UTF8_STRING (start_p, input_start_size);
|
||||
ecma_value_t result = ecma_make_string_value (ret_str_p);
|
||||
ecma_deref_ecma_string (to_str_p);
|
||||
return result;
|
||||
|
||||
}
|
||||
default:
|
||||
{
|
||||
JERRY_ASSERT (builtin_routine_id == ECMA_INTRINSIC_PARSE_INT
|
||||
@@ -236,7 +282,6 @@ ecma_builtin_intrinsic_dispatch_routine (uint16_t builtin_routine_id, /**< built
|
||||
|
||||
ECMA_FINALIZE_UTF8_STRING (string_buff, string_buff_size);
|
||||
ecma_deref_ecma_string (str_p);
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,6 +74,8 @@ ROUTINE (LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES, ECMA_INTRINSIC_ARRAY_
|
||||
ROUTINE (LIT_INTERNAL_MAGIC_STRING_TYPEDARRAY_PROTOTYPE_VALUES, ECMA_INTRINSIC_TYPEDARRAY_PROTOTYPE_VALUES, 0, 0)
|
||||
ROUTINE (LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_VALUES, ECMA_INTRINSIC_SET_PROTOTYPE_VALUES, 0, 0)
|
||||
ROUTINE (LIT_INTERNAL_MAGIC_STRING_MAP_PROTOTYPE_ENTRIES, ECMA_INTRINSIC_MAP_PROTOTYPE_ENTRIES, 0, 0)
|
||||
ROUTINE (LIT_MAGIC_STRING_TRIM_START, ECMA_INTRINSIC_STRING_TRIM_START, 0, 0)
|
||||
ROUTINE (LIT_MAGIC_STRING_TRIM_END, ECMA_INTRINSIC_STRING_TRIM_END, 0, 0)
|
||||
ROUTINE (LIT_MAGIC_STRING_TO_STRING_UL, ECMA_INTRINSIC_ARRAY_TO_STRING, 0, 0)
|
||||
ROUTINE (LIT_MAGIC_STRING_TO_UTC_STRING_UL, ECMA_INTRINSIC_DATE_TO_UTC_STRING, 0, 0)
|
||||
ROUTINE (LIT_MAGIC_STRING_PARSE_FLOAT, ECMA_INTRINSIC_PARSE_FLOAT, 1, 1)
|
||||
|
||||
@@ -76,6 +76,15 @@ ROUTINE (LIT_MAGIC_STRING_CODE_POINT_AT, ECMA_STRING_PROTOTYPE_CODE_POINT_AT, 1,
|
||||
ROUTINE (LIT_MAGIC_STRING_PAD_START, ECMA_STRING_PROTOTYPE_PAD_START, 2, 1)
|
||||
ROUTINE (LIT_MAGIC_STRING_PAD_END, ECMA_STRING_PROTOTYPE_PAD_END, 2, 1)
|
||||
ROUTINE (LIT_GLOBAL_SYMBOL_ITERATOR, ECMA_STRING_PROTOTYPE_ITERATOR, 0, 0)
|
||||
|
||||
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_TRIM_START, LIT_MAGIC_STRING_TRIM_START,
|
||||
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
|
||||
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_TRIM_LEFT, LIT_MAGIC_STRING_TRIM_START,
|
||||
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
|
||||
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_TRIM_END, LIT_MAGIC_STRING_TRIM_END,
|
||||
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
|
||||
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_TRIM_RIGHT, LIT_MAGIC_STRING_TRIM_END,
|
||||
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
|
||||
#endif /* ENABLED (JERRY_ESNEXT) */
|
||||
|
||||
#endif /* ENABLED (JERRY_BUILTIN_STRING) */
|
||||
|
||||
Reference in New Issue
Block a user