Make the Set.prototype values, keys and [@@iterator] methods to be one intrinsic method (#3777)
After this patch these methods will be the same function objects JerryScript-DCO-1.0-Signed-off-by: Adam Szilagyi aszilagy@inf.u-szeged.hu
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
*/
|
||||
|
||||
#include "ecma-builtins.h"
|
||||
#include "ecma-container-object.h"
|
||||
#include "ecma-array-object.h"
|
||||
#include "ecma-gc.h"
|
||||
#include "lit-char-helpers.h"
|
||||
@@ -36,7 +37,8 @@ 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_ARRAY_PROTOTYPE_VALUES,
|
||||
ECMA_INTRINSIC_SET_PROTOTYPE_KEYS
|
||||
};
|
||||
|
||||
#define BUILTIN_INC_HEADER_NAME "ecma-builtin-intrinsic.inc.h"
|
||||
@@ -81,6 +83,32 @@ ecma_builtin_intrinsic_array_prototype_values (ecma_value_t this_value) /**< thi
|
||||
return ret_value;
|
||||
} /* ecma_builtin_intrinsic_array_prototype_values */
|
||||
|
||||
/**
|
||||
* The Set.prototype values, keys and [@@iterator] routines
|
||||
*
|
||||
* See also:
|
||||
* ECMA-262 v6, 23.2.3.8
|
||||
* ECMA-262 v6, 23.2.3.10
|
||||
*
|
||||
* @return ecma value
|
||||
* 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_extended_object_t *map_object_p = ecma_op_container_get_object (this_value, LIT_MAGIC_STRING_SET_UL);
|
||||
|
||||
if (map_object_p == NULL)
|
||||
{
|
||||
return ECMA_VALUE_ERROR;
|
||||
}
|
||||
|
||||
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 */
|
||||
|
||||
/**
|
||||
* Dispatcher of the built-in's routines
|
||||
*
|
||||
@@ -103,6 +131,12 @@ ecma_builtin_intrinsic_dispatch_routine (uint16_t builtin_routine_id, /**< built
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -69,5 +69,6 @@ SYMBOL_VALUE (LIT_GLOBAL_SYMBOL_UNSCOPABLES,
|
||||
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"
|
||||
|
||||
@@ -45,9 +45,13 @@ ROUTINE (LIT_MAGIC_STRING_FOR_EACH_UL, ECMA_CONTAINER_ROUTINE_FOREACH, 2, 1)
|
||||
ROUTINE (LIT_MAGIC_STRING_HAS, ECMA_CONTAINER_ROUTINE_HAS, 1, 1)
|
||||
#if ENABLED (JERRY_ESNEXT)
|
||||
ROUTINE (LIT_MAGIC_STRING_ENTRIES, ECMA_CONTAINER_ROUTINE_ENTRIES, 0, 0)
|
||||
ROUTINE (LIT_MAGIC_STRING_VALUES, ECMA_CONTAINER_ROUTINE_VALUES, 0, 0)
|
||||
ROUTINE (LIT_GLOBAL_SYMBOL_ITERATOR, ECMA_CONTAINER_ROUTINE_VALUES, 0, 0)
|
||||
ROUTINE (LIT_MAGIC_STRING_KEYS, ECMA_CONTAINER_ROUTINE_KEYS, 0, 0)
|
||||
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_VALUES, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS,
|
||||
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
|
||||
INTRINSIC_PROPERTY (LIT_GLOBAL_SYMBOL_ITERATOR, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS,
|
||||
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
|
||||
INTRINSIC_PROPERTY (LIT_MAGIC_STRING_KEYS, LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS,
|
||||
ECMA_PROPERTY_CONFIGURABLE_WRITABLE)
|
||||
|
||||
#endif /* ENABLED (JERRY_ESNEXT) */
|
||||
|
||||
ACCESSOR_READ_ONLY (LIT_MAGIC_STRING_SIZE,
|
||||
|
||||
@@ -725,6 +725,10 @@ ecma_builtin_routine_try_to_instantiate_property (ecma_object_t *object_p, /**<
|
||||
{
|
||||
name_p = ecma_get_magic_string (LIT_MAGIC_STRING_VALUES);
|
||||
}
|
||||
else if (JERRY_UNLIKELY (name_id == LIT_INTERNAL_MAGIC_STRING_SET_PROTOTYPE_KEYS))
|
||||
{
|
||||
name_p = ecma_get_magic_string (LIT_MAGIC_STRING_VALUES);
|
||||
}
|
||||
else
|
||||
{
|
||||
JERRY_ASSERT (LIT_IS_GLOBAL_SYMBOL (name_id));
|
||||
|
||||
@@ -49,6 +49,7 @@ 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_THIS_BINDING_VALUE, /**< FunctionEnvironmentRecord [[ThisBindingValue]] internal slot */
|
||||
/* List of well known symbols */
|
||||
LIT_GLOBAL_SYMBOL_HAS_INSTANCE, /**< @@hasInstance well known symbol */
|
||||
|
||||
@@ -53,7 +53,8 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_MAP_UL, "Map")
|
||||
#endif
|
||||
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NAN, "NaN")
|
||||
#if ENABLED (JERRY_BUILTIN_CONTAINER) \
|
||||
|| ENABLED (JERRY_BUILTIN_SET)
|
||||
|| ENABLED (JERRY_BUILTIN_SET) \
|
||||
|| ENABLED (JERRY_ESNEXT)
|
||||
LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SET_UL, "Set")
|
||||
#endif
|
||||
#if ENABLED (JERRY_BUILTIN_DATE)
|
||||
|
||||
@@ -152,3 +152,5 @@ for (var value of s) {
|
||||
|
||||
assert(value === expected[loopCount++]);
|
||||
}
|
||||
|
||||
assert(Set.prototype.values === Set.prototype.keys);
|
||||
|
||||
@@ -143,8 +143,6 @@
|
||||
<test id="built-ins/RegExp/prototype/Symbol.search/get-sticky-coerce.js"><reason></reason></test>
|
||||
<test id="built-ins/RegExp/prototype/Symbol.search/get-sticky-err.js"><reason></reason></test>
|
||||
<test id="built-ins/RegExp/prototype/test/get-sticky-err.js"><reason></reason></test>
|
||||
<test id="built-ins/Set/prototype/keys/keys.js"><reason></reason></test>
|
||||
<test id="built-ins/Set/prototype/Symbol.iterator.js"><reason></reason></test>
|
||||
<test id="built-ins/String/prototype/normalize/form-is-not-valid-throws.js"><reason></reason></test>
|
||||
<test id="built-ins/String/prototype/normalize/length.js"><reason></reason></test>
|
||||
<test id="built-ins/String/prototype/normalize/name.js"><reason></reason></test>
|
||||
|
||||
Reference in New Issue
Block a user