Fix values of properties that reference intrinsic function objects (#4024)

JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai daniel.batyai@h-lab.eu
This commit is contained in:
Dániel Bátyai 2020-07-24 12:54:54 +02:00 committed by GitHub
parent 54bfd2ba37
commit cf097ca16b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 349 additions and 256 deletions

View File

@ -705,10 +705,11 @@ typedef enum
*/
typedef enum
{
ECMA_ITERATOR_KEYS, /**< List only key indices */
ECMA_ITERATOR_VALUES, /**< List only key values */
ECMA_ITERATOR_KEYS_VALUES, /**< List key indices and values */
} ecma_array_iterator_type_t;
ECMA_ITERATOR_KEYS, /**< keys iterator */
ECMA_ITERATOR_VALUES, /**< values iterator */
ECMA_ITERATOR_ENTRIES, /**< entries iterator */
ECMA_ITERATOR__COUNT, /**< number of iterator kinds */
} ecma_iterator_kind_t;
#endif /* ENABLED (JERRY_ESNEXT) */

View File

@ -123,9 +123,9 @@ ecma_builtin_array_iterator_prototype_object_next (ecma_value_t this_val) /**< t
}
/* 7. */
uint8_t iterator_type = ext_obj_p->u.pseudo_array.extra_info;
uint8_t iterator_kind = ext_obj_p->u.pseudo_array.extra_info;
if (iterator_type == ECMA_ITERATOR_KEYS)
if (iterator_kind == ECMA_ITERATOR_KEYS)
{
/* 12. */
return ecma_create_iter_result_object (ecma_make_uint32_value (index), ECMA_VALUE_FALSE);
@ -143,14 +143,14 @@ ecma_builtin_array_iterator_prototype_object_next (ecma_value_t this_val) /**< t
ecma_value_t result;
/* 16. */
if (iterator_type == ECMA_ITERATOR_VALUES)
if (iterator_kind == ECMA_ITERATOR_VALUES)
{
result = ecma_create_iter_result_object (get_value, ECMA_VALUE_FALSE);
}
else
{
/* 17.a */
JERRY_ASSERT (iterator_type == ECMA_ITERATOR_KEYS_VALUES);
JERRY_ASSERT (iterator_kind == ECMA_ITERATOR_ENTRIES);
/* 17.b */
ecma_value_t entry_array_value;

View File

@ -46,7 +46,9 @@ enum
{
ECMA_ARRAY_PROTOTYPE_ROUTINE_START = ECMA_BUILTIN_ID__COUNT - 1,
/* Note: these 2 routine ids must be in this order */
#if !ENABLED (JERRY_ESNEXT)
ECMA_ARRAY_PROTOTYPE_TO_STRING,
#endif /* !ENABLED (JERRY_ESNEXT) */
ECMA_ARRAY_PROTOTYPE_CONCAT,
ECMA_ARRAY_PROTOTYPE_TO_LOCALE_STRING,
ECMA_ARRAY_PROTOTYPE_JOIN,
@ -117,45 +119,6 @@ ecma_builtin_array_prototype_helper_set_length (ecma_object_t *object, /**< obje
return ret_value;
} /* ecma_builtin_array_prototype_helper_set_length */
/**
* The Array.prototype object's 'toString' routine
*
* See also:
* ECMA-262 v5, 15.4.4.2
*
* @return ecma value
* Returned value must be freed with ecma_free_value.
*/
static ecma_value_t
ecma_builtin_array_prototype_object_to_string (ecma_value_t this_arg, /**< this argument */
ecma_object_t *obj_p) /**< array object */
{
/* 2. */
ecma_value_t join_value = ecma_op_object_get_by_magic_id (obj_p, LIT_MAGIC_STRING_JOIN);
if (ECMA_IS_VALUE_ERROR (join_value))
{
return join_value;
}
if (!ecma_op_is_callable (join_value))
{
/* 3. */
ecma_free_value (join_value);
return ecma_builtin_helper_object_to_string (this_arg);
}
/* 4. */
ecma_object_t *join_func_obj_p = ecma_get_object_from_value (join_value);
ecma_value_t ret_value = ecma_op_function_call (join_func_obj_p, this_arg, NULL, 0);
ecma_deref_object (join_func_obj_p);
return ret_value;
} /* ecma_builtin_array_prototype_object_to_string */
/**
* The Array.prototype object's 'toLocaleString' routine
*
@ -2693,11 +2656,13 @@ ecma_builtin_array_prototype_dispatch_routine (uint16_t builtin_routine_id, /**<
{
ecma_value_t ret_value;
#if !ENABLED (JERRY_ESNEXT)
if (builtin_routine_id == ECMA_ARRAY_PROTOTYPE_TO_STRING)
{
ret_value = ecma_builtin_array_prototype_object_to_string (this_arg, obj_p);
ret_value = ecma_array_object_to_string (obj_this);
}
else
#endif /* !ENABLED (JERRY_ESNEXT) */
{
JERRY_ASSERT (builtin_routine_id == ECMA_ARRAY_PROTOTYPE_CONCAT);
ret_value = ecma_builtin_array_prototype_object_concat (arguments_list_p,
@ -2717,7 +2682,7 @@ ecma_builtin_array_prototype_dispatch_routine (uint16_t builtin_routine_id, /**<
if (builtin_routine_id == ECMA_ARRAY_PROTOTYPE_ENTRIES)
{
ret_value = ecma_op_create_array_iterator (obj_p, ECMA_ITERATOR_KEYS_VALUES);
ret_value = ecma_op_create_array_iterator (obj_p, ECMA_ITERATOR_ENTRIES);
}
else
{

View File

@ -46,8 +46,10 @@ NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
ROUTINE (LIT_MAGIC_STRING_TO_STRING_UL, ECMA_ARRAY_PROTOTYPE_TO_STRING, 0, 0)
ROUTINE (LIT_MAGIC_STRING_TO_LOCALE_STRING_UL, ECMA_ARRAY_PROTOTYPE_TO_LOCALE_STRING, 0, 0)
#if !ENABLED (JERRY_ESNEXT)
ROUTINE (LIT_MAGIC_STRING_TO_STRING_UL, ECMA_ARRAY_PROTOTYPE_TO_STRING, 0, 0)
#endif /* !ENABLED (JERRY_ESNEXT) */
ROUTINE (LIT_MAGIC_STRING_CONCAT, ECMA_ARRAY_PROTOTYPE_CONCAT, NON_FIXED, 1)
ROUTINE (LIT_MAGIC_STRING_JOIN, ECMA_ARRAY_PROTOTYPE_JOIN, 1, 1)
ROUTINE (LIT_MAGIC_STRING_POP, ECMA_ARRAY_PROTOTYPE_POP, 0, 0)
@ -77,6 +79,8 @@ ROUTINE (LIT_MAGIC_STRING_COPY_WITHIN, ECMA_ARRAY_PROTOTYPE_COPY_WITHIN, NON_FIX
ROUTINE (LIT_MAGIC_STRING_ENTRIES, ECMA_ARRAY_PROTOTYPE_ENTRIES, 0, 0)
ROUTINE (LIT_MAGIC_STRING_KEYS, ECMA_ARRAY_PROTOTYPE_KEYS, 0, 0)
ROUTINE (LIT_MAGIC_STRING_INCLUDES, ECMA_ARRAY_PROTOTYPE_INCLUDES, NON_FIXED, 1)
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_TO_STRING_UL, LIT_MAGIC_STRING_TO_STRING_UL,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_VALUES, LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
INTRINSIC_PROPERTY (LIT_GLOBAL_SYMBOL_ITERATOR, LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES,

View File

@ -93,8 +93,10 @@ enum
ECMA_DATE_PROTOTYPE_TO_STRING, /* ECMA-262 v5, 15.9.5.2 */
ECMA_DATE_PROTOTYPE_TO_DATE_STRING, /* ECMA-262 v5, 15.9.5.3 */
ECMA_DATE_PROTOTYPE_TO_TIME_STRING, /* ECMA-262 v5, 15.9.5.4 */
#if !ENABLED (JERRY_ESNEXT)
ECMA_DATE_PROTOTYPE_TO_UTC_STRING, /* ECMA-262 v5, 15.9.5.42 */
#endif /* ENABLED (JERRY_ESNEXT) */
ECMA_DATE_PROTOTYPE_TO_TIME_STRING, /* ECMA-262 v5, 15.9.5.4 */
ECMA_DATE_PROTOTYPE_TO_ISO_STRING, /* ECMA-262 v5, 15.9.5.43 */
ECMA_DATE_PROTOTYPE_GET_TIME, /* ECMA-262 v5, 15.9.5.9 */
@ -681,15 +683,17 @@ ecma_builtin_date_prototype_dispatch_routine (uint16_t builtin_routine_id, /**<
{
return ecma_date_value_to_date_string (*prim_value_p);
}
case ECMA_DATE_PROTOTYPE_TO_TIME_STRING:
#if !ENABLED (JERRY_ESNEXT)
case ECMA_DATE_PROTOTYPE_TO_UTC_STRING:
{
return ecma_date_value_to_time_string (*prim_value_p);
return ecma_date_value_to_utc_string (*prim_value_p);
}
#endif /* ENABLED (JERRY_ESNEXT) */
default:
{
JERRY_ASSERT (builtin_routine_id == ECMA_DATE_PROTOTYPE_TO_UTC_STRING);
JERRY_ASSERT (builtin_routine_id == ECMA_DATE_PROTOTYPE_TO_TIME_STRING);
return ecma_date_value_to_utc_string (*prim_value_p);
return ecma_date_value_to_time_string (*prim_value_p);
}
}
} /* ecma_builtin_date_prototype_dispatch_routine */

View File

@ -65,18 +65,27 @@ ROUTINE (LIT_MAGIC_STRING_SET_MONTH_UL, ECMA_DATE_PROTOTYPE_SET_MONTH, 2, 2)
ROUTINE (LIT_MAGIC_STRING_SET_UTC_MONTH_UL, ECMA_DATE_PROTOTYPE_SET_UTC_MONTH, 2, 2)
ROUTINE (LIT_MAGIC_STRING_SET_FULL_YEAR_UL, ECMA_DATE_PROTOTYPE_SET_FULL_YEAR, NON_FIXED, 3)
ROUTINE (LIT_MAGIC_STRING_SET_UTC_FULL_YEAR_UL, ECMA_DATE_PROTOTYPE_SET_UTC_FULL_YEAR, NON_FIXED, 3)
ROUTINE (LIT_MAGIC_STRING_TO_UTC_STRING_UL, ECMA_DATE_PROTOTYPE_TO_UTC_STRING, 0, 0)
ROUTINE (LIT_MAGIC_STRING_TO_ISO_STRING_UL, ECMA_DATE_PROTOTYPE_TO_ISO_STRING, 0, 0)
ROUTINE (LIT_MAGIC_STRING_TO_JSON_UL, ECMA_DATE_PROTOTYPE_TO_JSON, 1, 1)
#if ENABLED (JERRY_ESNEXT)
ROUTINE_CONFIGURABLE_ONLY (LIT_GLOBAL_SYMBOL_TO_PRIMITIVE, ECMA_DATE_PROTOTYPE_TO_PRIMITIVE, 1, 1)
#endif /* ENABLED (JERRY_ESNEXT) */
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_TO_UTC_STRING_UL, LIT_MAGIC_STRING_TO_UTC_STRING_UL,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
#if ENABLED (JERRY_BUILTIN_ANNEXB)
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_TO_GMT_STRING_UL, LIT_MAGIC_STRING_TO_UTC_STRING_UL,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
#endif /* ENABLED (JERRY_BUILTIN_ANNEXB) */
#else /* !ENABLED (JERRY_ESNEXT) */
ROUTINE (LIT_MAGIC_STRING_TO_UTC_STRING_UL, ECMA_DATE_PROTOTYPE_TO_UTC_STRING, 0, 0)
#if ENABLED (JERRY_BUILTIN_ANNEXB)
ROUTINE (LIT_MAGIC_STRING_TO_GMT_STRING_UL, ECMA_DATE_PROTOTYPE_TO_UTC_STRING, 0, 0)
#endif /* ENABLED (JERRY_BUILTIN_ANNEXB) */
#endif /* !ENABLED (JERRY_ESNEXT) */
#if ENABLED (JERRY_BUILTIN_ANNEXB)
ROUTINE (LIT_MAGIC_STRING_GET_YEAR_UL, ECMA_DATE_PROTOTYPE_GET_YEAR, 0, 0)
ROUTINE (LIT_MAGIC_STRING_SET_YEAR_UL, ECMA_DATE_PROTOTYPE_SET_YEAR, 1, 1)
ROUTINE (LIT_MAGIC_STRING_TO_GMT_STRING_UL, ECMA_DATE_PROTOTYPE_TO_UTC_STRING, 0, 0)
#endif /* ENABLED (JERRY_BUILTIN_ANNEXB) */

View File

@ -14,8 +14,10 @@
*/
#include "ecma-builtins.h"
#include "ecma-builtin-helpers.h"
#include "ecma-container-object.h"
#include "ecma-array-object.h"
#include "ecma-typedarray-object.h"
#include "ecma-gc.h"
#include "lit-char-helpers.h"
@ -35,10 +37,14 @@
enum
{
ECMA_INTRINSIC_ROUTINE_START = ECMA_BUILTIN_ID__COUNT - 1,
ECMA_INTRINSIC_PARSE_FLOAT,
ECMA_INTRINSIC_PARSE_INT,
ECMA_INTRINSIC_ARRAY_PROTOTYPE_VALUES,
ECMA_INTRINSIC_SET_PROTOTYPE_KEYS
ECMA_INTRINSIC_TYPEDARRAY_PROTOTYPE_VALUES,
ECMA_INTRINSIC_MAP_PROTOTYPE_ENTRIES,
ECMA_INTRINSIC_SET_PROTOTYPE_VALUES,
ECMA_INTRINSIC_ARRAY_TO_STRING,
ECMA_INTRINSIC_DATE_TO_UTC_STRING,
ECMA_INTRINSIC_PARSE_FLOAT,
ECMA_INTRINSIC_PARSE_INT
};
#define BUILTIN_INC_HEADER_NAME "ecma-builtin-intrinsic.inc.h"
@ -83,6 +89,32 @@ ecma_builtin_intrinsic_array_prototype_values (ecma_value_t this_value) /**< thi
return ret_value;
} /* ecma_builtin_intrinsic_array_prototype_values */
/**
* The Map.prototype entries and [@@iterator] routines
*
* See also:
* ECMA-262 v6, 23.1.3.4
* ECMA-262 v6, 23.1.3.12
*
* @return ecma value
* Returned value must be freed with ecma_free_value.
*/
static ecma_value_t
ecma_builtin_intrinsic_map_prototype_entries (ecma_value_t this_value)
{
ecma_extended_object_t *map_object_p = ecma_op_container_get_object (this_value, LIT_MAGIC_STRING_MAP_UL);
if (map_object_p == NULL)
{
return ECMA_VALUE_ERROR;
}
return ecma_op_container_create_iterator (this_value,
ECMA_BUILTIN_ID_MAP_ITERATOR_PROTOTYPE,
ECMA_PSEUDO_MAP_ITERATOR,
ECMA_ITERATOR_ENTRIES);
} /* ecma_builtin_intrinsic_map_prototype_entries */
/**
* The Set.prototype values, keys and [@@iterator] routines
*
@ -94,7 +126,7 @@ ecma_builtin_intrinsic_array_prototype_values (ecma_value_t this_value) /**< thi
* Returned value must be freed with ecma_free_value.
*/
static ecma_value_t
ecma_builtin_intrinsic_set_prototype_keys (ecma_value_t this_value)
ecma_builtin_intrinsic_set_prototype_values (ecma_value_t this_value)
{
ecma_extended_object_t *map_object_p = ecma_op_container_get_object (this_value, LIT_MAGIC_STRING_SET_UL);
@ -104,10 +136,10 @@ ecma_builtin_intrinsic_set_prototype_keys (ecma_value_t this_value)
}
return ecma_op_container_create_iterator (this_value,
0,
ECMA_BUILTIN_ID_SET_ITERATOR_PROTOTYPE,
ECMA_PSEUDO_SET_ITERATOR);
} /* ecma_builtin_intrinsic_set_prototype_keys */
ECMA_PSEUDO_SET_ITERATOR,
ECMA_ITERATOR_VALUES);
} /* ecma_builtin_intrinsic_set_prototype_values */
/**
* Dispatcher of the built-in's routines
@ -124,48 +156,90 @@ ecma_builtin_intrinsic_dispatch_routine (uint16_t builtin_routine_id, /**< built
{
JERRY_UNUSED (arguments_number);
ecma_value_t routine_arg_1 = arguments_list_p[0];
ecma_value_t routine_arg_2 = arguments_list_p[1];
if (builtin_routine_id == ECMA_INTRINSIC_ARRAY_PROTOTYPE_VALUES)
switch (builtin_routine_id)
{
return ecma_builtin_intrinsic_array_prototype_values (this_arg);
}
if (builtin_routine_id == ECMA_INTRINSIC_SET_PROTOTYPE_KEYS)
{
return ecma_builtin_intrinsic_set_prototype_keys (this_arg);
}
ecma_value_t ret_value = ECMA_VALUE_EMPTY;
if (builtin_routine_id <= ECMA_INTRINSIC_PARSE_INT)
{
ecma_string_t *str_p = ecma_op_to_string (routine_arg_1);
if (JERRY_UNLIKELY (str_p == NULL))
case ECMA_INTRINSIC_ARRAY_PROTOTYPE_VALUES:
{
return ECMA_VALUE_ERROR;
return ecma_builtin_intrinsic_array_prototype_values (this_arg);
}
ECMA_STRING_TO_UTF8_STRING (str_p, string_buff, string_buff_size);
if (builtin_routine_id == ECMA_INTRINSIC_PARSE_INT)
case ECMA_INTRINSIC_TYPEDARRAY_PROTOTYPE_VALUES:
{
ret_value = ecma_number_parse_int (string_buff,
string_buff_size,
routine_arg_2);
return ecma_typedarray_iterators_helper (this_arg, ECMA_ITERATOR_VALUES);
}
else
case ECMA_INTRINSIC_SET_PROTOTYPE_VALUES:
{
JERRY_ASSERT (builtin_routine_id == ECMA_INTRINSIC_PARSE_FLOAT);
ret_value = ecma_number_parse_float (string_buff,
string_buff_size);
return ecma_builtin_intrinsic_set_prototype_values (this_arg);
}
case ECMA_INTRINSIC_MAP_PROTOTYPE_ENTRIES:
{
return ecma_builtin_intrinsic_map_prototype_entries (this_arg);
}
case ECMA_INTRINSIC_ARRAY_TO_STRING:
{
ecma_value_t this_obj = ecma_op_to_object (this_arg);
if (ECMA_IS_VALUE_ERROR (this_obj))
{
return this_obj;
}
ecma_value_t result = ecma_array_object_to_string (this_obj);
ecma_deref_object (ecma_get_object_from_value (this_obj));
return result;
}
case ECMA_INTRINSIC_DATE_TO_UTC_STRING:
{
if (!ecma_is_value_object (this_arg)
|| !ecma_object_class_is (ecma_get_object_from_value (this_arg), LIT_MAGIC_STRING_DATE_UL))
{
return ecma_raise_type_error (ECMA_ERR_MSG ("'this' is not a Date object"));
}
ecma_extended_object_t *ext_object_p = (ecma_extended_object_t *) ecma_get_object_from_value (this_arg);
ecma_number_t *prim_value_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_number_t,
ext_object_p->u.class_prop.u.value);
if (ecma_number_is_nan (*prim_value_p))
{
return ecma_make_magic_string_value (LIT_MAGIC_STRING_INVALID_DATE_UL);
}
return ecma_date_value_to_utc_string (*prim_value_p);
}
default:
{
JERRY_ASSERT (builtin_routine_id == ECMA_INTRINSIC_PARSE_INT
|| builtin_routine_id == ECMA_INTRINSIC_PARSE_FLOAT);
ecma_string_t *str_p = ecma_op_to_string (arguments_list_p[0]);
if (JERRY_UNLIKELY (str_p == NULL))
{
return ECMA_VALUE_ERROR;
}
ecma_value_t result;
ECMA_STRING_TO_UTF8_STRING (str_p, string_buff, string_buff_size);
if (builtin_routine_id == ECMA_INTRINSIC_PARSE_INT)
{
result = ecma_number_parse_int (string_buff,
string_buff_size,
arguments_list_p[1]);
}
else
{
JERRY_ASSERT (builtin_routine_id == ECMA_INTRINSIC_PARSE_FLOAT);
result = ecma_number_parse_float (string_buff,
string_buff_size);
}
ECMA_FINALIZE_UTF8_STRING (string_buff, string_buff_size);
ecma_deref_ecma_string (str_p);
return result;
}
ECMA_FINALIZE_UTF8_STRING (string_buff, string_buff_size);
ecma_deref_ecma_string (str_p);
}
return ret_value;
} /* ecma_builtin_intrinsic_dispatch_routine */
/**

View File

@ -70,9 +70,13 @@ SYMBOL_VALUE (LIT_GLOBAL_SYMBOL_UNSCOPABLES,
LIT_MAGIC_STRING_UNSCOPABLES)
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
ROUTINE (LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES, ECMA_INTRINSIC_ARRAY_PROTOTYPE_VALUES, 0, 0)
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_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)
ROUTINE (LIT_MAGIC_STRING_PARSE_INT, ECMA_INTRINSIC_PARSE_INT, 2, 2)
ROUTINE (LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES, ECMA_INTRINSIC_ARRAY_PROTOTYPE_VALUES, 0, 0)
ROUTINE (LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS, ECMA_INTRINSIC_SET_PROTOTYPE_KEYS, 0, 0)
#endif /* ENABLED (JERRY_ESNEXT) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -42,10 +42,12 @@ ROUTINE (LIT_MAGIC_STRING_FOR_EACH_UL, ECMA_CONTAINER_ROUTINE_FOREACH, 2, 1)
ROUTINE (LIT_MAGIC_STRING_GET, ECMA_CONTAINER_ROUTINE_GET, 1, 1)
ROUTINE (LIT_MAGIC_STRING_HAS, ECMA_CONTAINER_ROUTINE_HAS, 1, 1)
ROUTINE (LIT_MAGIC_STRING_SET, ECMA_CONTAINER_ROUTINE_SET, 2, 2)
ROUTINE (LIT_MAGIC_STRING_ENTRIES, ECMA_CONTAINER_ROUTINE_ENTRIES, 0, 0)
ROUTINE (LIT_MAGIC_STRING_VALUES, ECMA_CONTAINER_ROUTINE_VALUES, 0, 0)
ROUTINE (LIT_MAGIC_STRING_KEYS, ECMA_CONTAINER_ROUTINE_KEYS, 0, 0)
ROUTINE (LIT_GLOBAL_SYMBOL_ITERATOR, ECMA_CONTAINER_ROUTINE_ENTRIES, 0, 0)
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_ENTRIES, LIT_INTERNAL_MAGIC_STRING_MAP_PROTOTYPE_ENTRIES,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
INTRINSIC_PROPERTY (LIT_GLOBAL_SYMBOL_ITERATOR, LIT_INTERNAL_MAGIC_STRING_MAP_PROTOTYPE_ENTRIES,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
/* ECMA-262 v6, 23.1.3.10 */
ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_SIZE,

View File

@ -42,11 +42,11 @@ ROUTINE (LIT_MAGIC_STRING_DELETE, ECMA_CONTAINER_ROUTINE_DELETE, 1, 1)
ROUTINE (LIT_MAGIC_STRING_FOR_EACH_UL, ECMA_CONTAINER_ROUTINE_FOREACH, 2, 1)
ROUTINE (LIT_MAGIC_STRING_HAS, ECMA_CONTAINER_ROUTINE_HAS, 1, 1)
ROUTINE (LIT_MAGIC_STRING_ENTRIES, ECMA_CONTAINER_ROUTINE_ENTRIES, 0, 0)
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_VALUES, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS,
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_VALUES, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_VALUES,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
INTRINSIC_PROPERTY (LIT_GLOBAL_SYMBOL_ITERATOR, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS,
INTRINSIC_PROPERTY (LIT_GLOBAL_SYMBOL_ITERATOR, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_VALUES,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_KEYS, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS,
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_KEYS, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_VALUES,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_SIZE,

View File

@ -1243,7 +1243,7 @@ ecma_builtin_string_prototype_object_iterator (ecma_value_t to_string) /**< this
return ecma_op_create_iterator_object (ecma_copy_value (to_string),
ecma_builtin_get (ECMA_BUILTIN_ID_STRING_ITERATOR_PROTOTYPE),
ECMA_PSEUDO_STRING_ITERATOR,
0);
ECMA_ITERATOR_VALUES);
} /* ecma_builtin_string_prototype_object_iterator */
#endif /* ENABLED (JERRY_ESNEXT) */

View File

@ -721,13 +721,15 @@ ecma_builtin_routine_try_to_instantiate_property (ecma_object_t *object_p, /**<
if (JERRY_UNLIKELY (name_id > LIT_NON_INTERNAL_MAGIC_STRING__COUNT))
{
/* Note: Whenever new intrinsic routine is being added this mapping should be updated as well! */
if (JERRY_UNLIKELY (name_id == LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES))
if (JERRY_UNLIKELY (name_id == LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES)
|| JERRY_UNLIKELY (name_id == LIT_INTERNAL_MAGIC_STRING_TYPEDARRAY_PROTOTYPE_VALUES)
|| JERRY_UNLIKELY (name_id == LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_VALUES))
{
name_p = ecma_get_magic_string (LIT_MAGIC_STRING_VALUES);
}
else if (JERRY_UNLIKELY (name_id == LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS))
else if (JERRY_UNLIKELY (name_id == LIT_INTERNAL_MAGIC_STRING_MAP_PROTOTYPE_ENTRIES))
{
name_p = ecma_get_magic_string (LIT_MAGIC_STRING_VALUES);
name_p = ecma_get_magic_string (LIT_MAGIC_STRING_ENTRIES);
}
else
{

View File

@ -329,39 +329,6 @@ ecma_builtin_typedarray_prototype_for_each (ecma_value_t this_arg, /**< this arg
TYPEDARRAY_ROUTINE_FOREACH);
} /* ecma_builtin_typedarray_prototype_for_each */
/**
* Helper function for typedArray.prototype object's {'keys', 'values', 'entries', '@@iterator'}
* routines common parts.
*
* See also:
* ECMA-262 v6, 22.2.3.15
* ECMA-262 v6, 22.2.3.29
* ECMA-262 v6, 22.2.3.6
* ECMA-262 v6, 22.1.3.30
*
* Note:
* Returned value must be freed with ecma_free_value.
*
* @return iterator result object, if success
* error - otherwise
*/
static ecma_value_t
ecma_builtin_typedarray_iterators_helper (ecma_value_t this_arg, /**< this argument */
uint8_t type) /**< any combination of ecma_iterator_type_t bits */
{
if (!ecma_is_typedarray (this_arg))
{
return ecma_raise_type_error (ECMA_ERR_MSG ("Argument 'this' is not a TypedArray."));
}
ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_ARRAY_ITERATOR_PROTOTYPE);
return ecma_op_create_iterator_object (this_arg,
prototype_obj_p,
ECMA_PSEUDO_ARRAY_ITERATOR,
type);
} /* ecma_builtin_typedarray_iterators_helper */
/**
* The %TypedArray%.prototype object's 'keys' routine
*
@ -375,25 +342,9 @@ ecma_builtin_typedarray_iterators_helper (ecma_value_t this_arg, /**< this argum
static ecma_value_t
ecma_builtin_typedarray_prototype_keys (ecma_value_t this_arg) /**< this argument */
{
return ecma_builtin_typedarray_iterators_helper (this_arg, ECMA_ITERATOR_KEYS);
return ecma_typedarray_iterators_helper (this_arg, ECMA_ITERATOR_KEYS);
} /* ecma_builtin_typedarray_prototype_keys */
/**
* The %TypedArray%.prototype object's 'values' and @@iterator routines
*
* See also:
* ES2015, 22.2.3.29
* ES2015, 22.1.3.30
*
* @return ecma value
* Returned value must be freed with ecma_free_value.
*/
static ecma_value_t
ecma_builtin_typedarray_prototype_values (ecma_value_t this_arg) /**< this argument */
{
return ecma_builtin_typedarray_iterators_helper (this_arg, ECMA_ITERATOR_VALUES);
} /* ecma_builtin_typedarray_prototype_values */
/**
* The %TypedArray%.prototype object's 'entries' routine
*
@ -407,7 +358,7 @@ ecma_builtin_typedarray_prototype_values (ecma_value_t this_arg) /**< this argum
static ecma_value_t
ecma_builtin_typedarray_prototype_entries (ecma_value_t this_arg) /**< this argument */
{
return ecma_builtin_typedarray_iterators_helper (this_arg, ECMA_ITERATOR_KEYS_VALUES);
return ecma_typedarray_iterators_helper (this_arg, ECMA_ITERATOR_ENTRIES);
} /* ecma_builtin_typedarray_prototype_entries */
/**
@ -1179,56 +1130,6 @@ cleanup:
return ret_value;
} /* ecma_builtin_typedarray_prototype_join */
/**
* The TypedArray.prototype object's 'toString' routine basen on
* the Array.porottype object's 'toString'
*
* See also:
* ECMA-262 v5, 15.4.4.2
*
* @return ecma value
* Returned value must be freed with ecma_free_value.
*/
static ecma_value_t
ecma_builtin_typedarray_prototype_object_to_string (ecma_value_t this_arg) /**< this argument */
{
ecma_value_t ret_value = ECMA_VALUE_EMPTY;
/* 1. */
ecma_value_t obj_this_value = ecma_op_to_object (this_arg);
if (ECMA_IS_VALUE_ERROR (obj_this_value))
{
return obj_this_value;
}
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this_value);
/* 2. */
ecma_value_t join_value = ecma_op_object_get_by_magic_id (obj_p, LIT_MAGIC_STRING_JOIN);
if (ECMA_IS_VALUE_ERROR (join_value))
{
ecma_free_value (obj_this_value);
return join_value;
}
if (!ecma_op_is_callable (join_value))
{
/* 3. */
ret_value = ecma_builtin_helper_object_to_string (this_arg);
}
else
{
/* 4. */
ecma_object_t *join_func_obj_p = ecma_get_object_from_value (join_value);
ret_value = ecma_op_function_call (join_func_obj_p, this_arg, NULL, 0);
}
ecma_free_value (join_value);
ecma_free_value (obj_this_value);
return ret_value;
} /* ecma_builtin_typedarray_prototype_object_to_string */
/**
* The %TypedArray%.prototype object's 'subarray' routine.
*

View File

@ -52,7 +52,6 @@ ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_TO_STRING_TAG,
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
ROUTINE (LIT_MAGIC_STRING_TO_STRING_UL, ecma_builtin_typedarray_prototype_object_to_string, 0, 0)
ROUTINE (LIT_MAGIC_STRING_JOIN, ecma_builtin_typedarray_prototype_join, 1, 1)
ROUTINE (LIT_MAGIC_STRING_EVERY, ecma_builtin_typedarray_prototype_every, 2, 1)
ROUTINE (LIT_MAGIC_STRING_SOME, ecma_builtin_typedarray_prototype_some, 2, 1)
@ -74,9 +73,13 @@ ROUTINE (LIT_MAGIC_STRING_COPY_WITHIN, ecma_builtin_typedarray_prototype_copy_wi
ROUTINE (LIT_MAGIC_STRING_SLICE, ecma_builtin_typedarray_prototype_slice, NON_FIXED, 2)
ROUTINE (LIT_MAGIC_STRING_TO_LOCALE_STRING_UL, ecma_builtin_typedarray_prototype_to_locale_string, 0, 0)
ROUTINE (LIT_MAGIC_STRING_KEYS, ecma_builtin_typedarray_prototype_keys, 0, 0)
ROUTINE (LIT_MAGIC_STRING_VALUES, ecma_builtin_typedarray_prototype_values, 0, 0)
ROUTINE (LIT_MAGIC_STRING_ENTRIES, ecma_builtin_typedarray_prototype_entries, 0, 0)
ROUTINE (LIT_GLOBAL_SYMBOL_ITERATOR, ecma_builtin_typedarray_prototype_values, 0, 0)
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_TO_STRING_UL, LIT_MAGIC_STRING_TO_STRING_UL,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_VALUES, LIT_INTERNAL_MAGIC_STRING_TYPEDARRAY_PROTOTYPE_VALUES,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
INTRINSIC_PROPERTY (LIT_GLOBAL_SYMBOL_ITERATOR, LIT_INTERNAL_MAGIC_STRING_TYPEDARRAY_PROTOTYPE_VALUES,
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
#endif /* ENABLED (JERRY_BUILTIN_TYPEDARRAY) */

View File

@ -768,14 +768,14 @@ ecma_op_array_species_create (ecma_object_t *original_array_p, /**< The object f
*/
ecma_value_t
ecma_op_create_array_iterator (ecma_object_t *obj_p, /**< array object */
ecma_array_iterator_type_t type) /**< array iterator type */
ecma_iterator_kind_t kind) /**< array iterator kind */
{
ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_ARRAY_ITERATOR_PROTOTYPE);
return ecma_op_create_iterator_object (ecma_make_object_value (obj_p),
prototype_obj_p,
ECMA_PSEUDO_ARRAY_ITERATOR,
(uint8_t) type);
kind);
} /* ecma_op_create_array_iterator */
#endif /* ENABLED (JERRY_ESNEXT) */
@ -1196,6 +1196,50 @@ ecma_array_get_length (ecma_object_t *array_p) /**< array object */
return ((ecma_extended_object_t *) array_p)->u.array.length;
} /* ecma_array_get_length */
/**
* The Array.prototype and %TypedArray%.prototype objects' 'toString' routine.
*
* See also:
* ECMA-262 v5, 15.4.4.2
* ECMA-262 v6, 22.1.3.7
*
* @return ecma value
* Returned value must be freed with ecma_free_value.
*/
ecma_value_t
ecma_array_object_to_string (ecma_value_t this_arg) /**< this argument */
{
JERRY_ASSERT (ecma_is_value_object (this_arg));
ecma_value_t ret_value = ECMA_VALUE_EMPTY;
ecma_object_t *obj_p = ecma_get_object_from_value (this_arg);
/* 2. */
ecma_value_t join_value = ecma_op_object_get_by_magic_id (obj_p, LIT_MAGIC_STRING_JOIN);
if (ECMA_IS_VALUE_ERROR (join_value))
{
return join_value;
}
if (!ecma_op_is_callable (join_value))
{
/* 3. */
ret_value = ecma_builtin_helper_object_to_string (this_arg);
}
else
{
/* 4. */
ecma_object_t *join_func_obj_p = ecma_get_object_from_value (join_value);
ret_value = ecma_op_function_call (join_func_obj_p, this_arg, NULL, 0);
}
ecma_free_value (join_value);
return ret_value;
} /* ecma_array_object_to_string */
/**
* List names of a String object's lazy instantiated properties
*

View File

@ -106,7 +106,7 @@ ecma_op_array_species_create (ecma_object_t *original_array_p,
ecma_value_t
ecma_op_create_array_iterator (ecma_object_t *obj_p,
ecma_array_iterator_type_t type);
ecma_iterator_kind_t kind);
#endif /* ENABLED (JERRY_ESNEXT) */
ecma_value_t
@ -118,6 +118,9 @@ ecma_op_array_object_define_own_property (ecma_object_t *object_p, ecma_string_t
uint32_t ecma_array_get_length (ecma_object_t *array_p);
ecma_value_t
ecma_array_object_to_string (ecma_value_t this_arg);
void
ecma_op_array_list_lazy_property_names (ecma_object_t *obj_p,
uint32_t opts,

View File

@ -974,17 +974,16 @@ ecma_op_container_remove_weak_entry (ecma_object_t *object_p, /**< internal cont
* @return Map/Set iterator object, if success
* error - otherwise
*/
ecma_value_t
inline ecma_value_t JERRY_ATTR_ALWAYS_INLINE
ecma_op_container_create_iterator (ecma_value_t this_arg, /**< this argument */
uint8_t type, /**< any combination of
* ecma_iterator_type_t bits */
ecma_builtin_id_t proto_id, /**< prototype builtin id */
ecma_pseudo_array_type_t iterator_type) /**< type of the iterator */
ecma_pseudo_array_type_t iterator_type, /**< iterator type */
ecma_iterator_kind_t kind) /**< iterator kind */
{
return ecma_op_create_iterator_object (this_arg,
ecma_builtin_get (proto_id),
(uint8_t) iterator_type,
type);
iterator_type,
kind);
} /* ecma_op_container_create_iterator */
/**
@ -1129,7 +1128,7 @@ ecma_op_container_iterator_next (ecma_value_t this_val, /**< this argument */
}
else
{
JERRY_ASSERT (iterator_kind == ECMA_ITERATOR_KEYS_VALUES);
JERRY_ASSERT (iterator_kind == ECMA_ITERATOR_ENTRIES);
ecma_value_t entry_array_value;
entry_array_value = ecma_create_array_from_iter_element (value_arg, key_arg);
@ -1216,12 +1215,12 @@ ecma_builtin_container_dispatch_routine (uint16_t builtin_routine_id, /**< built
iterator_type = ECMA_PSEUDO_SET_ITERATOR;
}
uint8_t mode = (uint8_t) (builtin_routine_id - ECMA_CONTAINER_ROUTINE_KEYS);
ecma_iterator_kind_t kind = (ecma_iterator_kind_t) (builtin_routine_id - ECMA_CONTAINER_ROUTINE_KEYS);
return ecma_op_container_create_iterator (this_arg,
mode,
builtin_iterator_prototype,
iterator_type);
iterator_type,
kind);
}
default:
{

View File

@ -70,8 +70,10 @@ ecma_value_t ecma_op_container_delete_weak (ecma_extended_object_t *map_object_p
void ecma_op_container_unref_weak (ecma_object_t *object_p, ecma_value_t ref_holder);
void ecma_op_container_remove_weak_entry (ecma_object_t *container_p, ecma_value_t key_arg);
void ecma_op_container_free_entries (ecma_object_t *object_p);
ecma_value_t ecma_op_container_create_iterator (ecma_value_t this_arg, uint8_t type,
ecma_builtin_id_t proto_id, ecma_pseudo_array_type_t iterator_type);
ecma_value_t ecma_op_container_create_iterator (ecma_value_t this_arg,
ecma_builtin_id_t proto_id,
ecma_pseudo_array_type_t iterator_type,
ecma_iterator_kind_t kind);
ecma_value_t ecma_op_container_iterator_next (ecma_value_t this_val, ecma_pseudo_array_type_t iterator_type);
ecma_value_t ecma_builtin_container_dispatch_routine (uint16_t builtin_routine_id, ecma_value_t this_arg,
const ecma_value_t arguments_list_p[],

View File

@ -135,11 +135,13 @@ ecma_create_iter_result_object (ecma_value_t value, /**< value */
ecma_value_t
ecma_op_create_iterator_object (ecma_value_t iterated_value, /**< value from create iterator */
ecma_object_t *prototype_obj_p, /**< prototype object */
uint8_t iterator_type, /**< iterator type, see ecma_pseudo_array_type_t */
uint8_t extra_info) /**< extra information */
ecma_pseudo_array_type_t iterator_type, /**< iterator type */
ecma_iterator_kind_t kind) /**< iterator kind*/
{
/* 1. */
JERRY_ASSERT (iterator_type >= ECMA_PSEUDO_ARRAY_ITERATOR && iterator_type <= ECMA_PSEUDO_ARRAY__MAX);
JERRY_ASSERT (iterator_type >= ECMA_PSEUDO_ARRAY_ITERATOR
&& iterator_type <= ECMA_PSEUDO_ARRAY__MAX
&& kind < ECMA_ITERATOR__COUNT);
/* 2. */
ecma_object_t *object_p = ecma_create_object (prototype_obj_p,
@ -147,14 +149,14 @@ ecma_op_create_iterator_object (ecma_value_t iterated_value, /**< value from cre
ECMA_OBJECT_TYPE_PSEUDO_ARRAY);
ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) object_p;
ext_obj_p->u.pseudo_array.type = iterator_type;
ext_obj_p->u.pseudo_array.type = (uint8_t) iterator_type;
/* 3. */
ext_obj_p->u.pseudo_array.u2.iterated_value = iterated_value;
/* 4. */
ext_obj_p->u.pseudo_array.u1.iterator_index = 0;
/* 5. */
ext_obj_p->u.pseudo_array.extra_info = extra_info;
ext_obj_p->u.pseudo_array.extra_info = (uint8_t) kind;
/* 6. */
return ecma_make_object_value (object_p);

View File

@ -44,8 +44,10 @@ typedef enum
#define ECMA_ITERATOR_INDEX_LIMIT UINT16_MAX
ecma_value_t
ecma_op_create_iterator_object (ecma_value_t iterated_value, ecma_object_t *prototype_obj_p,
uint8_t iterator_type, uint8_t extra_info);
ecma_op_create_iterator_object (ecma_value_t iterated_value,
ecma_object_t *prototype_obj_p,
ecma_pseudo_array_type_t iterator_type,
ecma_iterator_kind_t kind);
ecma_value_t
ecma_create_iter_result_object (ecma_value_t value, ecma_value_t done);

View File

@ -1221,6 +1221,39 @@ ecma_op_create_typedarray (const ecma_value_t *arguments_list_p, /**< the arg li
return ret;
} /* ecma_op_create_typedarray */
/**
* Helper function for typedArray.prototype object's {'keys', 'values', 'entries', '@@iterator'}
* routines common parts.
*
* See also:
* ECMA-262 v6, 22.2.3.15
* ECMA-262 v6, 22.2.3.29
* ECMA-262 v6, 22.2.3.6
* ECMA-262 v6, 22.1.3.30
*
* Note:
* Returned value must be freed with ecma_free_value.
*
* @return iterator result object, if success
* error - otherwise
*/
ecma_value_t
ecma_typedarray_iterators_helper (ecma_value_t this_arg, /**< this argument */
ecma_iterator_kind_t kind) /**< iterator kind */
{
if (!ecma_is_typedarray (this_arg))
{
return ecma_raise_type_error (ECMA_ERR_MSG ("Argument 'this' is not a TypedArray."));
}
ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_ARRAY_ITERATOR_PROTOTYPE);
return ecma_op_create_iterator_object (this_arg,
prototype_obj_p,
ECMA_PSEUDO_ARRAY_ITERATOR,
kind);
} /* ecma_typedarray_iterators_helper */
/**
* Check if the object is typedarray
*

View File

@ -58,6 +58,9 @@ ecma_value_t ecma_op_create_typedarray (const ecma_value_t *arguments_list_p,
ecma_object_t *proto_p,
uint8_t element_size_shift,
ecma_typedarray_type_t typedarray_id);
ecma_value_t
ecma_typedarray_iterators_helper (ecma_value_t this_arg, ecma_iterator_kind_t kind);
bool ecma_object_is_typedarray (ecma_object_t *obj_p);
bool ecma_is_typedarray (ecma_value_t target);
void ecma_op_typedarray_list_lazy_property_names (ecma_object_t *obj_p,

View File

@ -41,7 +41,9 @@ typedef enum
LIT_INTERNAL_MAGIC_STRING_MAP_KEY, /**< Property key used when an object is a key in a map object */
LIT_INTERNAL_MAGIC_API_INTERNAL, /**< Property key used to add non-visible JS properties from the public API */
LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES, /**< %ArrayProto_values% intrinsic routine */
LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS, /**< Set.prototype values, keys and [@@iterator] routines */
LIT_INTERNAL_MAGIC_STRING_TYPEDARRAY_PROTOTYPE_VALUES, /**< %TypedArray%.prototype values and [@@iterator] routine */
LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_VALUES, /**< Set.prototype values, keys and [@@iterator] routines */
LIT_INTERNAL_MAGIC_STRING_MAP_PROTOTYPE_ENTRIES, /**< Map.prototype entries and [@@iterator] routines */
LIT_INTERNAL_MAGIC_THIS_BINDING_VALUE, /**< FunctionEnvironmentRecord [[ThisBindingValue]] internal slot */
LIT_INTERNAL_MAGIC_PROMISE_CAPABILITY, /**< PromiseCapability record */
/* List of well known symbols */

View File

@ -48,7 +48,8 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_OF, "of")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LN2_U, "LN2")
#endif
#if ENABLED (JERRY_BUILTIN_CONTAINER) \
|| ENABLED (JERRY_BUILTIN_MAP)
|| ENABLED (JERRY_BUILTIN_MAP) \
|| ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_MAP_UL, "Map")
#endif
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NAN, "NaN")
@ -162,10 +163,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FROM, "from")
#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IMUL, "imul")
#endif
#if ENABLED (JERRY_BUILTIN_ARRAY) \
|| ENABLED (JERRY_BUILTIN_TYPEDARRAY)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_JOIN, "join")
#endif
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_KEYS, "keys")
#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LOG2, "log2")
@ -394,7 +392,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SEARCH, "search")
#endif
#if !ENABLED (JERRY_ESNEXT) && ENABLED (JERRY_BUILTIN_REGEXP) \
|| ENABLED (JERRY_BUILTIN_REGEXP) && ENABLED (JERRY_ESNEXT) \
|| ENABLED (JERRY_BUILTIN_REGEXP) && !( ENABLED (JERRY_ESNEXT))
|| ENABLED (JERRY_BUILTIN_REGEXP) && !(ENABLED (JERRY_ESNEXT))
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SOURCE, "source")
#endif
#if ENABLED (JERRY_BUILTIN_ARRAY)
@ -565,7 +563,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ITERATOR, "iterator")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_PAD_START, "padStart")
#endif
#if ENABLED (JERRY_ESNEXT) \
|| !( ENABLED (JERRY_ESNEXT))
|| !(ENABLED (JERRY_ESNEXT))
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_PARSE_INT, "parseInt")
#endif
#if ENABLED (JERRY_BUILTIN_DATE)
@ -638,7 +636,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LASTINDEX_UL, "lastIndex")
#endif
#if !ENABLED (JERRY_ESNEXT) && ENABLED (JERRY_BUILTIN_REGEXP) \
|| ENABLED (JERRY_BUILTIN_REGEXP) && ENABLED (JERRY_ESNEXT) \
|| ENABLED (JERRY_BUILTIN_REGEXP) && !( ENABLED (JERRY_ESNEXT))
|| ENABLED (JERRY_BUILTIN_REGEXP) && !(ENABLED (JERRY_ESNEXT))
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_MULTILINE, "multiline")
#endif
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_PROTOTYPE, "prototype")
@ -693,11 +691,11 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_UTC_DATE_UL, "getUTCDate")
#endif
#if !ENABLED (JERRY_ESNEXT) && ENABLED (JERRY_BUILTIN_REGEXP) \
|| ENABLED (JERRY_BUILTIN_REGEXP) && ENABLED (JERRY_ESNEXT) \
|| ENABLED (JERRY_BUILTIN_REGEXP) && !( ENABLED (JERRY_ESNEXT))
|| ENABLED (JERRY_BUILTIN_REGEXP) && !(ENABLED (JERRY_ESNEXT))
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IGNORECASE_UL, "ignoreCase")
#endif
#if ENABLED (JERRY_ESNEXT) \
|| !( ENABLED (JERRY_ESNEXT))
|| !(ENABLED (JERRY_ESNEXT))
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_PARSE_FLOAT, "parseFloat")
#endif
#if ENABLED (JERRY_BUILTIN_DATAVIEW)
@ -755,7 +753,8 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_FULL_YEAR_UL, "setFullYear")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_UTC_HOURS_UL, "setUTCHours")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_UTC_MONTH_UL, "setUTCMonth")
#endif
#if ENABLED (JERRY_BUILTIN_ANNEXB) && ENABLED (JERRY_BUILTIN_DATE)
#if ENABLED (JERRY_BUILTIN_ANNEXB) && ENABLED (JERRY_BUILTIN_DATE) && ENABLED (JERRY_ESNEXT) \
|| ENABLED (JERRY_BUILTIN_ANNEXB) && ENABLED (JERRY_BUILTIN_DATE) && !(ENABLED (JERRY_ESNEXT))
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_GMT_STRING_UL, "toGMTString")
#endif
#if ENABLED (JERRY_BUILTIN_DATE)
@ -771,7 +770,8 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_PRECISION_UL, "toPrecision")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_PRIMITIVE, "toPrimitive")
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_STRING_TAG, "toStringTag")
#endif
#if ENABLED (JERRY_BUILTIN_DATE)
#if ENABLED (JERRY_BUILTIN_DATE) && !(ENABLED (JERRY_ESNEXT)) \
|| ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TO_UTC_STRING_UL, "toUTCString")
#endif
#if ENABLED (JERRY_BUILTIN_STRING)
@ -786,7 +786,8 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FLOAT32_ARRAY_UL, "Float32Array")
#if ENABLED (JERRY_BUILTIN_TYPEDARRAY) && ENABLED (JERRY_NUMBER_TYPE_FLOAT64)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FLOAT64_ARRAY_UL, "Float64Array")
#endif
#if ENABLED (JERRY_BUILTIN_DATE)
#if ENABLED (JERRY_BUILTIN_DATE) \
|| ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_INVALID_DATE_UL, "Invalid Date")
#endif
#if ENABLED (JERRY_BUILTIN_MAP) \
@ -937,7 +938,8 @@ LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (1, LIT_MAGIC_STRING_OF)
#elif ENABLED (JERRY_BUILTIN_MATH)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (1, LIT_MAGIC_STRING_LN2_U)
#elif ENABLED (JERRY_BUILTIN_CONTAINER) \
|| ENABLED (JERRY_BUILTIN_MAP)
|| ENABLED (JERRY_BUILTIN_MAP) \
|| ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (1, LIT_MAGIC_STRING_MAP_UL)
#else
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (1, LIT_MAGIC_STRING_NAN)
@ -952,7 +954,8 @@ LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (2, LIT_MAGIC_STRING_OF)
#elif ENABLED (JERRY_BUILTIN_MATH)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (2, LIT_MAGIC_STRING_LN2_U)
#elif ENABLED (JERRY_BUILTIN_CONTAINER) \
|| ENABLED (JERRY_BUILTIN_MAP)
|| ENABLED (JERRY_BUILTIN_MAP) \
|| ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (2, LIT_MAGIC_STRING_MAP_UL)
#else
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (2, LIT_MAGIC_STRING_NAN)
@ -960,7 +963,8 @@ LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (2, LIT_MAGIC_STRING_NAN)
#if ENABLED (JERRY_BUILTIN_MATH)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (3, LIT_MAGIC_STRING_LN2_U)
#elif ENABLED (JERRY_BUILTIN_CONTAINER) \
|| ENABLED (JERRY_BUILTIN_MAP)
|| ENABLED (JERRY_BUILTIN_MAP) \
|| ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (3, LIT_MAGIC_STRING_MAP_UL)
#else
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (3, LIT_MAGIC_STRING_NAN)
@ -1007,7 +1011,8 @@ LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (11, LIT_MAGIC_STRING_RESOURCE_ANON)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (12, LIT_MAGIC_STRING_FLOAT32_ARRAY_UL)
#elif ENABLED (JERRY_BUILTIN_TYPEDARRAY) && ENABLED (JERRY_NUMBER_TYPE_FLOAT64)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (12, LIT_MAGIC_STRING_FLOAT64_ARRAY_UL)
#elif ENABLED (JERRY_BUILTIN_DATE)
#elif ENABLED (JERRY_BUILTIN_DATE) \
|| ENABLED (JERRY_ESNEXT)
LIT_MAGIC_STRING_FIRST_STRING_WITH_SIZE (12, LIT_MAGIC_STRING_INVALID_DATE_UL)
#elif ENABLED (JERRY_BUILTIN_MAP) \
|| ENABLED (JERRY_ESNEXT)

View File

@ -0,0 +1,30 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
assert(Array.prototype.values === Array.prototype[Symbol.iterator]);
assert(Set.prototype.values === Set.prototype[Symbol.iterator]);
assert(Set.prototype.keys === Set.prototype[Symbol.iterator]);
assert(Map.prototype.entries === Map.prototype[Symbol.iterator]);
assert(Date.prototype.toGMTString === Date.prototype.toUTCString);
assert(Number.parseInt === parseInt);
assert(Number.parseFloat === parseFloat);
var typedarrays = [Uint8Array, Uint16Array, Uint32Array, Int8Array, Int16Array, Int32Array, Float32Array, Float64Array];
for (ta1 of typedarrays) {
for (ta2 of typedarrays) {
assert(ta1.prototype.values === ta2.prototype[Symbol.iterator]);
}
assert(ta1.prototype.toString === Array.prototype.toString);
}

View File

@ -60,7 +60,6 @@
<test id="built-ins/decodeURIComponent/S15.1.3.2_A2.5_T1.js"><reason></reason></test>
<test id="built-ins/decodeURI/S15.1.3.1_A2.5_T1.js"><reason></reason></test>
<test id="built-ins/GeneratorPrototype/next/context-constructor-invocation.js"><reason></reason></test>
<test id="built-ins/Map/prototype/Symbol.iterator.js"><reason></reason></test>
<test id="built-ins/Promise/all/invoke-then.js"><reason></reason></test>
<test id="built-ins/Promise/all/species-get-error.js"><reason></reason></test>
<test id="built-ins/Promise/exec-args.js"><reason></reason></test>

View File

@ -127,11 +127,11 @@ def extract_magic_string_refs(debug=False):
guard_stack.append([process_guard(if_match.group(1))])
elif elif_match is not None:
guards = guard_stack[-1]
guards[-1] = '!(%s)' % guards[-1]
guards[-1] = '!(%s)' % guards[-1].strip()
guards.append(process_guard(elif_match.group(1)))
elif else_match is not None:
guards = guard_stack[-1]
guards[-1] = '!(%s)' % guards[-1]
guards[-1] = '!(%s)' % guards[-1].strip()
elif endif_match is not None:
guard_stack.pop()