mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
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:
parent
54bfd2ba37
commit
cf097ca16b
@ -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) */
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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) */
|
||||
|
||||
|
||||
@ -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 */
|
||||
|
||||
/**
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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) */
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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.
|
||||
*
|
||||
|
||||
@ -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) */
|
||||
|
||||
|
||||
@ -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
|
||||
*
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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:
|
||||
{
|
||||
|
||||
@ -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[],
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
|
||||
*
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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)
|
||||
|
||||
30
tests/jerry/es.next/intrinsic-properties.js
Normal file
30
tests/jerry/es.next/intrinsic-properties.js
Normal 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);
|
||||
}
|
||||
@ -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>
|
||||
|
||||
@ -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()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user