Add support for builtin/builtin routine 'name' property (#3810)

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
Robert Fancsik 2020-05-29 14:28:52 +02:00 committed by GitHub
parent 5895b96bdb
commit 3b4c259281
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 512 additions and 112 deletions

View File

@ -818,6 +818,18 @@ typedef struct
} u;
} ecma_built_in_props_t;
/**
* Builtin routine function object status flags
*/
typedef enum
{
ECMA_BUILTIN_ROUTINE_NO_OPTS = 0, /**< No options are provided */
ECMA_BUILTIN_ROUTINE_LENGTH_INITIALIZED = (1u << 0), /**< 'length' property has been initialized */
ECMA_BUILTIN_ROUTINE_NAME_INITIALIZED = (1u << 1), /**< 'name' property has been initialized */
ECMA_BUILTIN_ROUTINE_GETTER = (1u << 2), /**< this routine is getter */
ECMA_BUILTIN_ROUTINE_SETTER = (1u << 3), /**< this routine is setter */
} ecma_builtin_routine_flags_t;
/**
* Start position of bit set size in length_and_bitset_size field.
*/

View File

@ -36,6 +36,12 @@ NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
1,
ECMA_PROPERTY_FLAG_DEFAULT_LENGTH)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_ARRAY_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
ROUTINE (LIT_MAGIC_STRING_IS_ARRAY_UL, ecma_builtin_array_object_is_array, 1, 1)

View File

@ -35,6 +35,10 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_ARRAYBUFFER_PROTOTYPE,
ECMA_PROPERTY_FIXED)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_ARRAY_BUFFER_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */

View File

@ -36,6 +36,12 @@ NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
1,
ECMA_PROPERTY_FLAG_DEFAULT_LENGTH)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_BOOLEAN_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#endif /* ENABLED (JERRY_BUILTIN_BOOLEAN) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -34,6 +34,12 @@ ROUTINE (LIT_MAGIC_STRING_PARSE, ecma_builtin_date_parse, 1, 1)
ROUTINE (LIT_MAGIC_STRING_UTC_U, ecma_builtin_date_utc, NON_FIXED, 7)
ROUTINE (LIT_MAGIC_STRING_NOW, ecma_builtin_date_now, 0, 0)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_DATE_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#endif /* ENABLED (JERRY_BUILTIN_DATE) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -34,4 +34,10 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_ERROR_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -36,6 +36,12 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_EVAL_ERROR_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_EVAL_ERROR_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#endif /* ENABLED (JERRY_BUILTIN_ERRORS) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -348,15 +348,21 @@ ecma_builtin_function_prototype_object_bind (ecma_object_t *this_arg_obj_p , /**
return name_value;
}
if (!ecma_is_value_string (name_value))
ecma_string_t *name_p;
if (ecma_is_value_string (name_value))
{
name_p = ecma_get_string_from_value (name_value);
}
else
{
ecma_free_value (name_value);
name_value = ecma_make_magic_string_value (LIT_MAGIC_STRING__EMPTY);
name_p = ecma_get_magic_string (LIT_MAGIC_STRING__EMPTY);
}
ecma_value_t bound_function_name = ecma_op_function_form_name (name_value, "bound ", 6);
ecma_value_t bound_function_name = ecma_op_function_form_name (name_p, "bound ", 6);
ecma_free_value (name_value);
ecma_deref_ecma_string (name_p);
ecma_property_value_t *name_prop_value_p;
name_prop_value_p = ecma_create_named_data_property (function_p,

View File

@ -34,6 +34,12 @@ NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
0,
ECMA_PROPERTY_FLAG_DEFAULT_LENGTH)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING__EMPTY,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
/* 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_FUNCTION_PROTOTYPE_TO_STRING, 0, 0)

View File

@ -34,4 +34,10 @@ NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
1,
ECMA_PROPERTY_FLAG_DEFAULT_LENGTH)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_FUNCTION_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -70,6 +70,9 @@ NUMBER_VALUE (LIT_MAGIC_STRING_MIN_SAFE_INTEGER_U,
ECMA_BUILTIN_NUMBER_MIN_SAFE_INTEGER,
ECMA_PROPERTY_FIXED)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_NUMBER_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
/* Object properties:

View File

@ -34,6 +34,12 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_OBJECT_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
ROUTINE (LIT_MAGIC_STRING_GET_PROTOTYPE_OF_UL, ECMA_OBJECT_ROUTINE_GET_PROTOTYPE_OF, 1, 1)

View File

@ -35,6 +35,10 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_PROMISE_PROTOTYPE,
ECMA_PROPERTY_FIXED)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_PROMISE_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
ROUTINE (LIT_MAGIC_STRING_REJECT, ecma_builtin_promise_reject, 1, 1)

View File

@ -28,6 +28,10 @@ NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
2,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_PROXY_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */

View File

@ -36,6 +36,12 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_RANGE_ERROR_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_RANGE_ERROR_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#endif /* ENABLED (JERRY_BUILTIN_ERRORS) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -36,6 +36,12 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_REFERENCE_ERROR_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_REFERENCE_ERROR_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#endif /* ENABLED (JERRY_BUILTIN_ERRORS) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -31,6 +31,10 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_REGEXP_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
/* ECMA-262 v6, 21.2.4.2 */
ACCESSOR_READ_ONLY (LIT_GLOBAL_SYMBOL_SPECIES,
ecma_builtin_regexp_species_get,

View File

@ -36,6 +36,12 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_STRING_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_STRING_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
/* Routine properties:
* (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */
ROUTINE (LIT_MAGIC_STRING_FROM_CHAR_CODE_UL, ecma_builtin_string_object_from_char_code, NON_FIXED, 1)

View File

@ -29,6 +29,10 @@ NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH,
0,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_STRING_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
/* Object properties:
* (property name, object pointer getter) */

View File

@ -36,6 +36,12 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_SYNTAX_ERROR_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_SYNTAX_ERROR_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#endif /* ENABLED (JERRY_BUILTIN_ERRORS) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -36,6 +36,12 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_TYPE_ERROR_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_SYNTAX_ERROR_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#endif /* ENABLED (JERRY_BUILTIN_ERRORS) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -36,6 +36,12 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE,
ECMA_BUILTIN_ID_URI_ERROR_PROTOTYPE,
ECMA_PROPERTY_FIXED)
#if ENABLED (JERRY_ES2015)
STRING_VALUE (LIT_MAGIC_STRING_NAME,
LIT_MAGIC_STRING_URI_ERROR_UL,
ECMA_PROPERTY_FLAG_CONFIGURABLE)
#endif /* ENABLED (JERRY_ES2015) */
#endif /* ENABLED (JERRY_BUILTIN_ERRORS) */
#include "ecma-builtin-helpers-macro-undefs.inc.h"

View File

@ -19,6 +19,7 @@
#include "ecma-gc.h"
#include "ecma-globals.h"
#include "ecma-helpers.h"
#include "ecma-function-object.h"
#include "ecma-objects.h"
#include "jcontext.h"
#include "jrt-bit-fields.h"
@ -556,6 +557,7 @@ ecma_builtin_make_function_object_for_routine (ecma_builtin_id_t builtin_id, /**
uint16_t routine_id, /**< builtin-wide identifier of the built-in
* object's routine property */
uint16_t name_id, /**< magic string id of 'name' property */
uint16_t flags, /**< see also: ecma_builtin_routine_flags */
uint8_t length_prop_value) /**< value of 'length' property */
{
JERRY_ASSERT (length_prop_value < (1 << ECMA_BUILT_IN_BITSET_SHIFT));
@ -576,7 +578,7 @@ ecma_builtin_make_function_object_for_routine (ecma_builtin_id_t builtin_id, /**
ext_func_obj_p->u.built_in.id = (uint8_t) builtin_id;
ext_func_obj_p->u.built_in.routine_id = routine_id;
ext_func_obj_p->u.built_in.u.builtin_routine.name = name_id;
ext_func_obj_p->u.built_in.u.builtin_routine.bitset = 0;
ext_func_obj_p->u.built_in.u.builtin_routine.bitset = flags;
ext_func_obj_p->u.built_in.length_and_bitset_size = length_prop_value;
@ -594,7 +596,11 @@ ecma_builtin_make_function_object_for_getter_accessor (ecma_builtin_id_t builtin
* object's routine property */
uint16_t name_id) /**< magic string id of 'name' property */
{
return ecma_builtin_make_function_object_for_routine (builtin_id, routine_id, name_id, 0);
return ecma_builtin_make_function_object_for_routine (builtin_id,
routine_id,
name_id,
ECMA_BUILTIN_ROUTINE_GETTER,
0);
} /* ecma_builtin_make_function_object_for_getter_accessor */
/**
@ -608,7 +614,11 @@ ecma_builtin_make_function_object_for_setter_accessor (ecma_builtin_id_t builtin
* object's routine property */
uint16_t name_id) /**< magic string id of 'name' property */
{
return ecma_builtin_make_function_object_for_routine (builtin_id, routine_id, name_id, 1);
return ecma_builtin_make_function_object_for_routine (builtin_id,
routine_id,
name_id,
ECMA_BUILTIN_ROUTINE_SETTER,
1);
} /* ecma_builtin_make_function_object_for_setter_accessor */
/**
@ -638,14 +648,14 @@ ecma_builtin_routine_try_to_instantiate_property (ecma_object_t *object_p, /**<
ecma_extended_object_t *ext_func_p = (ecma_extended_object_t *) object_p;
#if ENABLED (JERRY_ES2015)
uint16_t *bitset_p = &ext_func_p->u.built_in.u.builtin_routine.bitset;
if (*bitset_p & (1u << 0))
if (*bitset_p & ECMA_BUILTIN_ROUTINE_LENGTH_INITIALIZED)
{
/* length property was already instantiated */
return NULL;
}
/* We mark that the property was lazily instantiated,
* as it is configurable and so can be deleted (ECMA-262 v6, 19.2.4.1) */
*bitset_p |= (1u << 0);
*bitset_p |= ECMA_BUILTIN_ROUTINE_LENGTH_INITIALIZED;
ecma_property_value_t *len_prop_value_p = ecma_create_named_data_property (object_p,
string_p,
ECMA_PROPERTY_FLAG_CONFIGURABLE,
@ -667,6 +677,70 @@ ecma_builtin_routine_try_to_instantiate_property (ecma_object_t *object_p, /**<
return len_prop_p;
}
#if ENABLED (JERRY_ES2015)
/*
* Lazy instantiation of 'name' property
*/
if (ecma_compare_ecma_string_to_magic_id (string_p, LIT_MAGIC_STRING_NAME))
{
ecma_extended_object_t *ext_func_p = (ecma_extended_object_t *) object_p;
uint16_t *bitset_p = &ext_func_p->u.built_in.u.builtin_routine.bitset;
if (*bitset_p & ECMA_BUILTIN_ROUTINE_NAME_INITIALIZED)
{
/* name property was already instantiated */
return NULL;
}
/* We mark that the property was lazily instantiated */
*bitset_p |= ECMA_BUILTIN_ROUTINE_NAME_INITIALIZED;
ecma_property_t *name_prop_p;
ecma_property_value_t *name_prop_value_p = ecma_create_named_data_property (object_p,
string_p,
ECMA_PROPERTY_FLAG_CONFIGURABLE,
&name_prop_p);
ecma_string_t *name_p;
lit_magic_string_id_t name_id = ext_func_p->u.built_in.u.builtin_routine.name;
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))
{
name_p = ecma_get_magic_string (LIT_MAGIC_STRING_VALUES);
}
else
{
JERRY_ASSERT (LIT_IS_GLOBAL_SYMBOL (name_id));
name_p = ecma_op_get_global_symbol (name_id);
}
}
else
{
name_p = ecma_get_magic_string (name_id);
}
char *prefix_p = NULL;
lit_utf8_size_t prefix_size = 0;
if (*bitset_p & (ECMA_BUILTIN_ROUTINE_GETTER | ECMA_BUILTIN_ROUTINE_SETTER))
{
prefix_size = 4;
prefix_p = (*bitset_p & ECMA_BUILTIN_ROUTINE_GETTER) ? "get " : "set ";
}
name_prop_value_p->value = ecma_op_function_form_name (name_p, prefix_p, prefix_size);
if (JERRY_UNLIKELY (name_id > LIT_NON_INTERNAL_MAGIC_STRING__COUNT))
{
ecma_deref_ecma_string (name_p);
}
return name_prop_p;
}
#endif /* ENABLED (JERRY_ES2015) */
return NULL;
} /* ecma_builtin_routine_try_to_instantiate_property */
@ -870,6 +944,7 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object *
func_obj_p = ecma_builtin_make_function_object_for_routine (builtin_id,
ECMA_GET_ROUTINE_ID (curr_property_p->value),
curr_property_p->magic_string_id,
ECMA_BUILTIN_ROUTINE_NO_OPTS,
ECMA_GET_ROUTINE_LENGTH (curr_property_p->value));
value = ecma_make_object_value (func_obj_p);
break;
@ -967,11 +1042,16 @@ ecma_builtin_routine_list_lazy_property_names (ecma_object_t *object_p, /**< a b
{
#if ENABLED (JERRY_ES2015)
ecma_extended_object_t *ext_func_p = (ecma_extended_object_t *) object_p;
if (!(ext_func_p->u.built_in.u.builtin_routine.bitset & (1u << 0)))
if (!(ext_func_p->u.built_in.u.builtin_routine.bitset & ECMA_BUILTIN_ROUTINE_LENGTH_INITIALIZED))
{
/* Unintialized 'length' property is non-enumerable (ECMA-262 v6, 19.2.4.1) */
ecma_collection_push_back (for_non_enumerable_p, ecma_make_magic_string_value (LIT_MAGIC_STRING_LENGTH));
}
if (!(ext_func_p->u.built_in.u.builtin_routine.bitset & ECMA_BUILTIN_ROUTINE_NAME_INITIALIZED))
{
/* Unintialized 'name' property is non-enumerable (ECMA-262 v6, 19.2.4.2) */
ecma_collection_push_back (for_non_enumerable_p, ecma_make_magic_string_value (LIT_MAGIC_STRING_NAME));
}
#else /* !ENABLED (JERRY_ES2015) */
/* 'length' property is non-enumerable (ECMA-262 v5, 15) */
ecma_collection_push_back (for_non_enumerable_p, ecma_make_magic_string_value (LIT_MAGIC_STRING_LENGTH));

View File

@ -60,12 +60,10 @@ ecma_op_resource_name (const ecma_compiled_code_t *bytecode_header_p)
* @return resource name as ecma-string
*/
ecma_value_t
ecma_op_function_form_name (ecma_value_t prop_name, /**< property name */
ecma_op_function_form_name (ecma_string_t *prop_name_p, /**< property name */
char *prefix_p, /**< prefix */
lit_utf8_size_t prefix_size) /**< prefix length */
{
ecma_string_t *prop_name_p = ecma_get_prop_name_from_value (prop_name);
/* 4. */
if (ecma_prop_name_is_symbol (prop_name_p))
{

View File

@ -32,7 +32,7 @@ ecma_value_t ecma_op_resource_name (const ecma_compiled_code_t *bytecode_header_
#endif /* ENABLED (JERRY_RESOURCE_NAME) */
#if ENABLED (JERRY_ES2015)
ecma_value_t ecma_op_function_form_name (ecma_value_t prop_name, char *prefix_p, lit_utf8_size_t prefix_size);
ecma_value_t ecma_op_function_form_name (ecma_string_t *prop_name_p, char *prefix_p, lit_utf8_size_t prefix_size);
#endif /* ENABLED (JERRY_ES2015) */
bool ecma_op_is_callable (ecma_value_t value);

View File

@ -75,6 +75,11 @@ typedef enum
LIT_MAGIC_STRING__COUNT /**< number of magic strings */
} lit_magic_string_id_t;
/**
* Checks whether the given id corresponds to a global symbol
*/
#define LIT_IS_GLOBAL_SYMBOL(id) ((id) >= LIT_GLOBAL_SYMBOL_HAS_INSTANCE && (id) <= LIT_GLOBAL_SYMBOL_UNSCOPABLES)
/**
* Identifiers of implementation-defined external magic string constants
*/

View File

@ -1883,7 +1883,9 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
ECMA_SET_SECOND_BIT_TO_POINTER_TAG (((ecma_extended_object_t *) func_obj_p)->u.function.scope_cp);
}
value_p->value = ecma_op_function_form_name (left_value, prefix_p, prefix_size);
value_p->value = ecma_op_function_form_name (ecma_get_prop_name_from_value (left_value),
prefix_p,
prefix_size);
ecma_free_value (left_value);
continue;
}

View File

@ -0,0 +1,287 @@
// 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.
function assertNameExists(func) {
assert(func.hasOwnProperty('name') === true);
}
function assertNameNotExists(func) {
assert(func.hasOwnProperty('name') === false);
assert(Function.prototype.name === '');
assert(func.name === '');
}
function assertConfigurableOnlyMethod(func) {
let desc = Object.getOwnPropertyDescriptor(func, 'name');
assert(desc.configurable === true);
assert(desc.writable === false);
assert(desc.enumerable === false);
delete func.name;
assertNameNotExists(func);
Object.defineProperty(func, 'name', {value: 'newName', configurable: true});
assert (Object.getOwnPropertyDescriptor(func, 'name').value === 'newName');
assertNameExists(func);
delete func.name;
assertNameNotExists(func);
Object.defineProperty(func, 'name', desc);
}
function assertConfigurableOnlyAccessor(func, name, method) {
let accessor = Object.getOwnPropertyDescriptor(func, name)[method];
assertConfigurableOnlyMethod(accessor);
}
function assertMethodName(func, name, functionName = name) {
assertNameExists(func);
assertConfigurableOnlyMethod(func)
assert(Object.getOwnPropertyDescriptor(func, 'name').value === functionName)
}
function assertGetterName(obj, name, functionName = name) {
assertConfigurableOnlyAccessor(obj, name, 'get');
assert(Object.getOwnPropertyDescriptor(obj, name).get['name'] === 'get ' + functionName)
}
function assertSetterName(obj, name, functionName = name) {
assertConfigurableOnlyAccessor(obj, name, 'set');
assert(Object.getOwnPropertyDescriptor(obj, name).set['name'] === 'set ' + functionName)
}
var func1 = function () {};
assertMethodName(func1, 'func1');
var func2 = function bar() {};
assertMethodName(func2, 'bar');
var func3 = (function () {}).prototype.constructor;
assert(typeof func3 === 'function');
assertNameNotExists(func3);
var func4;
func4 = function () {}
assertMethodName(func4, 'func4');
var func5;
func5 = function bar () {}
assertMethodName(func5, 'bar');
var func6;
(func6) = function () {}
assertNameNotExists(func6);
var func7;
(func7) = function bar () {}
assertMethodName(func7, 'bar');
let emptySymbolMethod = Symbol();
let namedSymbolMethod = Symbol('foo');
let emptySymbolGetter = Symbol();
let namedSymbolGetter = Symbol('foo');
let emptySymbolSetter = Symbol();
let namedSymbolSetter = Symbol('foo');
var o = {
func1() {},
func2: function () {},
func3: function bar() {},
func4: () => {},
func5: class {},
func6: class A {},
func7: class name { static name () {} },
['func' + '8']() {},
['func' + '9']: function () {},
['func' + '10']: function bar() {},
['func' + '11']: () => {},
['func' + '12']: class {},
['func' + '13']: class A {},
['func' + '14']: class name { static name () {} },
get func15() {},
get ['func' + '16']() {},
set func17(a) {},
set ['func' + '18'](a) {},
[emptySymbolMethod]() {},
[namedSymbolMethod]() {},
get [emptySymbolGetter]() {},
get [namedSymbolGetter]() {},
set [emptySymbolSetter](a) {},
set [namedSymbolSetter](a) {},
}
assertMethodName(o.func1, 'func1');
assertMethodName(o.func2, 'func2');
assertMethodName(o.func3, 'bar');
assertMethodName(o.func4, 'func4');
assertMethodName(o.func5, 'func5');
assertMethodName(o.func6, 'A');
assert(typeof o.func7 === 'function');
assertMethodName(o.func8, 'func8');
assertMethodName(o.func9, 'func9');
assertMethodName(o.func10, 'bar');
assertMethodName(o.func11, 'func11');
assertMethodName(o.func12, 'func12');
assertMethodName(o.func13, 'A');
assert(typeof o.func14 === 'function');
assertGetterName(o, 'func15');
assertGetterName(o, 'func16');
assertSetterName(o, 'func17');
assertSetterName(o, 'func17');
assertMethodName(o[emptySymbolMethod], '');
assertMethodName(o[namedSymbolMethod], '[foo]');
assertGetterName(o, emptySymbolGetter, '');
assertGetterName(o, namedSymbolGetter, '[foo]');
assertSetterName(o, emptySymbolSetter, '');
assertSetterName(o, namedSymbolSetter, '[foo]');
class A {
constructor () {}
func1() {}
get func2() {}
set func3(a) {}
static func4() {}
static get func5() {}
static set func6(a) {}
['func' + '7']() {}
get ['func' + '8']() {}
set ['func' + '9'](a) {}
static ['func' + '10']() {}
static get ['func' + '11']() {}
static set ['func' + '12'](a) {}
[emptySymbolMethod]() {}
[namedSymbolMethod]() {}
get [emptySymbolGetter]() {}
get [namedSymbolGetter]() {}
set [emptySymbolSetter](a) {}
set [namedSymbolSetter](a) {}
static [emptySymbolMethod]() {}
static [namedSymbolMethod]() {}
static get [emptySymbolGetter]() {}
static get [namedSymbolGetter]() {}
static set [emptySymbolSetter](a) {}
static set [namedSymbolSetter](a) {}
}
assertMethodName(A.prototype.func1, 'func1');
assertGetterName(A.prototype, 'func2');
assertSetterName(A.prototype, 'func3');
assertMethodName(A.func4, 'func4');
assertGetterName(A, 'func5');
assertSetterName(A, 'func6');
assertMethodName(A.prototype.func7, 'func7');
assertGetterName(A.prototype, 'func8');
assertSetterName(A.prototype, 'func9');
assertMethodName(A.func10, 'func10');
assertGetterName(A, 'func11');
assertSetterName(A, 'func12');
assertMethodName(A[emptySymbolMethod], '');
assertMethodName(A[namedSymbolMethod], '[foo]');
assertGetterName(A, emptySymbolGetter, '');
assertGetterName(A, namedSymbolGetter, '[foo]');
assertSetterName(A, emptySymbolSetter, '');
assertSetterName(A, namedSymbolSetter, '[foo]');
assertMethodName(A.prototype[emptySymbolMethod], '');
assertMethodName(A.prototype[namedSymbolMethod], '[foo]');
assertGetterName(A.prototype, emptySymbolGetter, '');
assertGetterName(A.prototype, namedSymbolGetter, '[foo]');
assertSetterName(A.prototype, emptySymbolSetter, '');
assertSetterName(A.prototype, namedSymbolSetter, '[foo]');
class B {
func1() {}
get func2() {}
set func3(a) {}
static func4() {}
static get func5() {}
static set func6(a) {}
['func' + '7']() {}
get ['func' + '8']() {}
set ['func' + '9'](a) {}
static ['func' + '10']() {}
static get ['func' + '11']() {}
static set ['func' + '12'](a) {}
[emptySymbolMethod]() {}
[namedSymbolMethod]() {}
get [emptySymbolGetter]() {}
get [namedSymbolGetter]() {}
set [emptySymbolSetter](a) {}
set [namedSymbolSetter](a) {}
static [emptySymbolMethod]() {}
static [namedSymbolMethod]() {}
static get [emptySymbolGetter]() {}
static get [namedSymbolGetter]() {}
static set [emptySymbolSetter](a) {}
static set [namedSymbolSetter](a) {}
}
assertMethodName(B.prototype.func1, 'func1');
assertGetterName(B.prototype, 'func2');
assertSetterName(B.prototype, 'func3');
assertMethodName(B.func4, 'func4');
assertGetterName(B, 'func5');
assertSetterName(B, 'func6');
assertMethodName(B.prototype.func7, 'func7');
assertGetterName(B.prototype, 'func8');
assertSetterName(B.prototype, 'func9');
assertMethodName(B.func10, 'func10');
assertGetterName(B, 'func11');
assertSetterName(B, 'func12');
assertMethodName(B[emptySymbolMethod], '');
assertMethodName(B[namedSymbolMethod], '[foo]');
assertGetterName(B, emptySymbolGetter, '');
assertGetterName(B, namedSymbolGetter, '[foo]');
assertSetterName(B, emptySymbolSetter, '');
assertSetterName(B, namedSymbolSetter, '[foo]');
assertMethodName(B.prototype[emptySymbolMethod], '');
assertMethodName(B.prototype[namedSymbolMethod], '[foo]');
assertGetterName(B.prototype, emptySymbolGetter, '');
assertGetterName(B.prototype, namedSymbolGetter, '[foo]');
assertSetterName(B.prototype, emptySymbolSetter, '');
assertSetterName(B.prototype, namedSymbolSetter, '[foo]');
let names = ['push', 'pop', 'reduce', 'reduceRight'];
for (let n of names) {
assert(Array.prototype[n].name === n);
}
assert(Array.prototype[Symbol.iterator].name === 'values');
assert(Array.prototype.values.name === 'values');
assert(Object.getOwnPropertyDescriptor(Array, Symbol.species).get.name === 'get [Symbol.species]');
assert(Object.getOwnPropertyDescriptor(String.prototype, Symbol.iterator).value.name === '[Symbol.iterator]');
assert(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').get.name === 'get __proto__');
assert(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set.name === 'set __proto__');

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" ?>
<excludeList>
<test id="annexB/B.2.2.1.1.js"><reason></reason></test>
<test id="annexB/B.2.2.1.2.js"><reason></reason></test>
<test id="annexB/B.2.3.10.js"><reason></reason></test>
<test id="annexB/B.2.3.11.js"><reason></reason></test>
@ -15,17 +14,6 @@
<test id="annexB/B.2.3.7.js"><reason></reason></test>
<test id="annexB/B.2.3.8.js"><reason></reason></test>
<test id="annexB/B.2.3.9.js"><reason></reason></test>
<test id="built-ins/ArrayBuffer/prototype/byteLength/name.js"><reason></reason></test>
<test id="built-ins/ArrayBuffer/symbol-species.js"><reason></reason></test>
<test id="built-ins/ArrayBuffer/symbol-species-name.js"><reason></reason></test>
<test id="built-ins/Array/from/Array.from-name.js"><reason></reason></test>
<test id="built-ins/Array/of/name.js"><reason></reason></test>
<test id="built-ins/Array/prototype/copyWithin/name.js"><reason></reason></test>
<test id="built-ins/Array/prototype/entries/name.js"><reason></reason></test>
<test id="built-ins/Array/prototype/fill/name.js"><reason></reason></test>
<test id="built-ins/Array/prototype/findIndex/name.js"><reason></reason></test>
<test id="built-ins/Array/prototype/find/name.js"><reason></reason></test>
<test id="built-ins/Array/prototype/keys/name.js"><reason></reason></test>
<test id="built-ins/Array/prototype/lastIndexOf/15.4.4.15-3-28.js"><reason></reason></test>
<test id="built-ins/Array/prototype/map/15.4.4.19-3-14.js"><reason></reason></test>
<test id="built-ins/Array/prototype/map/15.4.4.19-3-28.js"><reason></reason></test>
@ -41,44 +29,24 @@
<test id="built-ins/Array/prototype/splice/S15.4.4.12_A3_T1.js"><reason></reason></test>
<test id="built-ins/Array/prototype/toLocaleString/primitive_this_value_getter.js"><reason></reason></test>
<test id="built-ins/Array/prototype/toLocaleString/primitive_this_value.js"><reason></reason></test>
<test id="built-ins/Array/prototype/values/name.js"><reason></reason></test>
<test id="built-ins/Array/symbol-species-name.js"><reason></reason></test>
<test id="built-ins/Boolean/prototype/S15.6.3.1_A1.js"><reason></reason></test>
<test id="built-ins/Boolean/prototype/S15.6.4_A1.js"><reason></reason></test>
<test id="built-ins/Boolean/prototype/toString/S15.6.4.2_A1_T1.js"><reason></reason></test>
<test id="built-ins/Boolean/prototype/toString/S15.6.4.2_A1_T2.js"><reason></reason></test>
<test id="built-ins/Boolean/prototype/valueOf/S15.6.4.3_A1_T1.js"><reason></reason></test>
<test id="built-ins/Boolean/prototype/valueOf/S15.6.4.3_A1_T2.js"><reason></reason></test>
<test id="built-ins/DataView/prototype/buffer/name.js"><reason></reason></test>
<test id="built-ins/DataView/prototype/byteLength/name.js"><reason></reason></test>
<test id="built-ins/DataView/prototype/byteOffset/name.js"><reason></reason></test>
<test id="built-ins/Date/construct_with_date.js"><reason></reason></test>
<test id="built-ins/Date/prototype/Symbol.toPrimitive/hint-invalid.js"><reason></reason></test>
<test id="built-ins/Date/prototype/Symbol.toPrimitive/name.js"><reason></reason></test>
<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/Function/prototype/bind/15.3.4.5-15-5.js"><reason></reason></test>
<test id="built-ins/Function/prototype/bind/BoundFunction_restricted-properties.js"><reason></reason></test>
<test id="built-ins/Function/prototype/name.js"><reason></reason></test>
<test id="built-ins/Function/prototype/Symbol.hasInstance/name.js"><reason></reason></test>
<test id="built-ins/Function/StrictFunction_restricted-properties.js"><reason></reason></test>
<test id="built-ins/GeneratorFunction/instance-restricted-properties.js"><reason></reason></test>
<test id="built-ins/GeneratorPrototype/next/context-constructor-invocation.js"><reason></reason></test>
<test id="built-ins/GeneratorPrototype/throw/from-state-completed.js"><reason></reason></test>
<test id="built-ins/IteratorPrototype/Symbol.iterator/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/clear/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/delete/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/entries/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/forEach/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/get/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/has/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/keys/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/set/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/size/name.js"><reason></reason></test>
<test id="built-ins/Map/prototype/size/size.js"><reason></reason></test>
<test id="built-ins/Map/prototype/Symbol.iterator.js"><reason></reason></test>
<test id="built-ins/Map/prototype/values/name.js"><reason></reason></test>
<test id="built-ins/Map/symbol-species-name.js"><reason></reason></test>
<test id="built-ins/Number/15.7.4-1.js"><reason></reason></test>
<test id="built-ins/Number/prototype/S15.7.3.1_A2_T1.js"><reason></reason></test>
<test id="built-ins/Number/prototype/S15.7.3.1_A2_T2.js"><reason></reason></test>
@ -124,9 +92,6 @@
<test id="built-ins/Number/prototype/toString/S15.7.4.2_A2_T34.js"><reason></reason></test>
<test id="built-ins/Number/prototype/valueOf/S15.7.4.4_A1_T01.js"><reason></reason></test>
<test id="built-ins/Number/prototype/valueOf/S15.7.4.4_A1_T02.js"><reason></reason></test>
<test id="built-ins/Object/assign/name.js"><reason></reason></test>
<test id="built-ins/Object/is/name.js"><reason></reason></test>
<test id="built-ins/Object/is/object-is.js"><reason></reason></test>
<test id="built-ins/Object/prototype/hasOwnProperty/symbol_property_toPrimitive.js"><reason></reason></test>
<test id="built-ins/Object/prototype/hasOwnProperty/symbol_property_toString.js"><reason></reason></test>
<test id="built-ins/Object/prototype/hasOwnProperty/symbol_property_valueOf.js"><reason></reason></test>
@ -135,57 +100,28 @@
<test id="built-ins/Object/prototype/propertyIsEnumerable/symbol_property_valueOf.js"><reason></reason></test>
<test id="built-ins/Object/prototype/toLocaleString/primitive_this_value_getter.js"><reason></reason></test>
<test id="built-ins/Object/prototype/toLocaleString/primitive_this_value.js"><reason></reason></test>
<test id="built-ins/Object/setPrototypeOf/name.js"><reason></reason></test>
<test id="built-ins/Promise/all/invoke-then.js"><reason></reason></test>
<test id="built-ins/Promise/all/name.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>
<test id="built-ins/Promise/name.js"><reason></reason></test>
<test id="built-ins/Promise/prototype/catch/invokes-then.js"><reason></reason></test>
<test id="built-ins/Promise/prototype/catch/name.js"><reason></reason></test>
<test id="built-ins/Promise/prototype/then/ctor-custom.js"><reason></reason></test>
<test id="built-ins/Promise/prototype/then/name.js"><reason></reason></test>
<test id="built-ins/Promise/prototype/then/on-fulfilled-return-thenable.js"><reason></reason></test>
<test id="built-ins/Promise/race/invoke-then.js"><reason></reason></test>
<test id="built-ins/Promise/race/name.js"><reason></reason></test>
<test id="built-ins/Promise/race/species-get-error.js"><reason></reason></test>
<test id="built-ins/Promise/reject/name.js"><reason></reason></test>
<test id="built-ins/Promise/resolve/name.js"><reason></reason></test>
<test id="built-ins/Promise/symbol-species-name.js"><reason></reason></test>
<test id="built-ins/Proxy/enumerate/call-parameters.js"><reason></reason></test>
<test id="built-ins/Proxy/enumerate/return-is-abrupt.js"><reason></reason></test>
<test id="built-ins/Proxy/enumerate/return-trap-result.js"><reason></reason></test>
<test id="built-ins/Proxy/enumerate/return-trap-result-no-value.js"><reason></reason></test>
<test id="built-ins/Proxy/enumerate/trap-is-undefined.js"><reason></reason></test>
<test id="built-ins/Proxy/getOwnPropertyDescriptor/trap-is-undefined.js"><reason></reason></test>
<test id="built-ins/Proxy/name.js"><reason></reason></test>
<test id="built-ins/Reflect/apply/name.js"><reason></reason></test>
<test id="built-ins/Reflect/construct/name.js"><reason></reason></test>
<test id="built-ins/Reflect/defineProperty/name.js"><reason></reason></test>
<test id="built-ins/Reflect/deleteProperty/name.js"><reason></reason></test>
<test id="built-ins/Reflect/enumerate/does-not-iterate-over-symbol-properties.js"><reason></reason></test>
<test id="built-ins/Reflect/enumerate/enumerate.js"><reason></reason></test>
<test id="built-ins/Reflect/enumerate/length.js"><reason></reason></test>
<test id="built-ins/Reflect/enumerate/name.js"><reason></reason></test>
<test id="built-ins/Reflect/enumerate/return-abrupt-from-result.js"><reason></reason></test>
<test id="built-ins/Reflect/enumerate/return-iterator.js"><reason></reason></test>
<test id="built-ins/Reflect/get/name.js"><reason></reason></test>
<test id="built-ins/Reflect/getOwnPropertyDescriptor/name.js"><reason></reason></test>
<test id="built-ins/Reflect/getPrototypeOf/name.js"><reason></reason></test>
<test id="built-ins/Reflect/has/name.js"><reason></reason></test>
<test id="built-ins/Reflect/isExtensible/name.js"><reason></reason></test>
<test id="built-ins/Reflect/ownKeys/name.js"><reason></reason></test>
<test id="built-ins/Reflect/preventExtensions/name.js"><reason></reason></test>
<test id="built-ins/Reflect/set/name.js"><reason></reason></test>
<test id="built-ins/Reflect/setPrototypeOf/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/exec/get-sticky-coerce.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/exec/get-sticky-err.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/flags/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/global/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/ignoreCase/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/multiline/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/source/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/sticky/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/builtin-coerce-global.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/builtin-coerce-lastindex-err.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/builtin-coerce-sticky.js"><reason></reason></test>
@ -198,11 +134,9 @@
<test id="built-ins/RegExp/prototype/Symbol.match/coerce-global.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/coerce-sticky.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/get-sticky-err.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.replace/coerce-global.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.replace/coerce-unicode.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.replace/get-sticky-coerce.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.replace/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.replace/y-fail-global-return.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.replace/y-fail-lastindex-no-write.js"><reason></reason></test>
@ -210,27 +144,10 @@
<test id="built-ins/RegExp/prototype/Symbol.replace/y-set-lastindex.js"><reason></reason></test>
<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/Symbol.search/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/Symbol.split/name.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/test/get-sticky-err.js"><reason></reason></test>
<test id="built-ins/RegExp/prototype/unicode/name.js"><reason></reason></test>
<test id="built-ins/RegExp/symbol-species-name.js"><reason></reason></test>
<test id="built-ins/Set/prototype/add/name.js"><reason></reason></test>
<test id="built-ins/Set/prototype/clear/name.js"><reason></reason></test>
<test id="built-ins/Set/prototype/delete/name.js"><reason></reason></test>
<test id="built-ins/Set/prototype/entries/name.js"><reason></reason></test>
<test id="built-ins/Set/prototype/forEach/name.js"><reason></reason></test>
<test id="built-ins/Set/prototype/has/name.js"><reason></reason></test>
<test id="built-ins/Set/prototype/keys/keys.js"><reason></reason></test>
<test id="built-ins/Set/prototype/size/name.js"><reason></reason></test>
<test id="built-ins/Set/prototype/size/size.js"><reason></reason></test>
<test id="built-ins/Set/prototype/Symbol.iterator.js"><reason></reason></test>
<test id="built-ins/Set/prototype/values/name.js"><reason></reason></test>
<test id="built-ins/Set/symbol-species-name.js"><reason></reason></test>
<test id="built-ins/String/fromCodePoint/name.js"><reason></reason></test>
<test id="built-ins/String/prototype/codePointAt/name.js"><reason></reason></test>
<test id="built-ins/String/prototype/endsWith/name.js"><reason></reason></test>
<test id="built-ins/String/prototype/includes/name.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>
@ -240,30 +157,17 @@
<test id="built-ins/String/prototype/normalize/return-normalized-string-from-coerced-form.js"><reason></reason></test>
<test id="built-ins/String/prototype/normalize/return-normalized-string.js"><reason></reason></test>
<test id="built-ins/String/prototype/normalize/return-normalized-string-using-default-parameter.js"><reason></reason></test>
<test id="built-ins/String/prototype/repeat/name.js"><reason></reason></test>
<test id="built-ins/String/prototype/S15.5.4_A1.js"><reason></reason></test>
<test id="built-ins/String/prototype/S15.5.4_A2.js"><reason></reason></test>
<test id="built-ins/String/prototype/S15.5.4_A3.js"><reason></reason></test>
<test id="built-ins/String/prototype/split/S15.5.4.14_A2_T37.js"><reason></reason></test>
<test id="built-ins/String/prototype/startsWith/name.js"><reason></reason></test>
<test id="built-ins/String/prototype/Symbol.iterator/name.js"><reason></reason></test>
<test id="built-ins/String/prototype/toLocaleLowerCase/special_casing_conditional.js"><reason></reason></test>
<test id="built-ins/String/prototype/toLocaleLowerCase/supplementary_plane.js"><reason></reason></test>
<test id="built-ins/String/prototype/toLocaleUpperCase/supplementary_plane.js"><reason></reason></test>
<test id="built-ins/String/prototype/toLowerCase/special_casing_conditional.js"><reason></reason></test>
<test id="built-ins/String/prototype/toLowerCase/supplementary_plane.js"><reason></reason></test>
<test id="built-ins/String/prototype/toUpperCase/supplementary_plane.js"><reason></reason></test>
<test id="built-ins/String/raw/name.js"><reason></reason></test>
<test id="built-ins/Symbol/prototype/Symbol.toPrimitive/length.js"><reason></reason></test>
<test id="built-ins/Symbol/prototype/Symbol.toPrimitive/name.js"><reason></reason></test>
<test id="built-ins/Symbol/species/builtin-getter-name.js"><reason></reason></test>
<test id="built-ins/WeakMap/prototype/delete/name.js"><reason></reason></test>
<test id="built-ins/WeakMap/prototype/get/name.js"><reason></reason></test>
<test id="built-ins/WeakMap/prototype/has/name.js"><reason></reason></test>
<test id="built-ins/WeakMap/prototype/set/name.js"><reason></reason></test>
<test id="built-ins/WeakSet/prototype/add/name.js"><reason></reason></test>
<test id="built-ins/WeakSet/prototype/delete/name.js"><reason></reason></test>
<test id="built-ins/WeakSet/prototype/has/name.js"><reason></reason></test>
<test id="intl402/6.2.2_a.js"><reason></reason></test>
<test id="intl402/6.2.2_b.js"><reason></reason></test>
<test id="intl402/6.2.2_c.js"><reason></reason></test>
@ -459,7 +363,6 @@
<test id="language/expressions/compound-assignment/S11.13.2_A7.9_T4.js"><reason></reason></test>
<test id="language/expressions/equals/coerce-symbol-to-prim-return-prim.js"><reason></reason></test>
<test id="language/expressions/generators/has-instance.js"><reason></reason></test>
<test id="language/expressions/generators/no-name.js"><reason></reason></test>
<test id="language/expressions/generators/prototype-value.js"><reason></reason></test>
<test id="language/expressions/object/method-definition/generator-invoke-ctor.js"><reason></reason></test>
<test id="language/expressions/object/method-definition/generator-super-prop-body.js"><reason></reason></test>