Introduce builtin intrinsic object to share property values between builtin objects (#3490)

Fixed:
 - Global symbol access
 - Array.prototype.values and Array.prototype[Symbol.iterator] must be the same function object

To test the new functionality arguments object Symbol.iterator property is added.

JerryScript-DCO-1.0-Signed-off-by: Robert Fancsik frobert@inf.u-szeged.hu
This commit is contained in:
Robert Fancsik
2020-01-16 15:57:27 +01:00
committed by GitHub
parent 332e216736
commit 8b41bf306a
26 changed files with 349 additions and 110 deletions
@@ -793,7 +793,7 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object *
#if ENABLED (JERRY_ES2015)
case ECMA_BUILTIN_PROPERTY_SYMBOL:
{
lit_magic_string_id_t symbol_desc_id = (lit_magic_string_id_t) curr_property_p->magic_string_id;
lit_magic_string_id_t symbol_desc_id = (lit_magic_string_id_t) curr_property_p->value;
ecma_string_t *symbol_desc_p;
symbol_desc_p = ecma_append_magic_string_to_string (ecma_get_magic_string (LIT_MAGIC_STRING_SYMBOL_DOT_UL),
@@ -802,12 +802,18 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object *
ecma_value_t symbol_desc_value = ecma_make_string_value (symbol_desc_p);
ecma_string_t *symbol_p = ecma_new_symbol_from_descriptor_string (symbol_desc_value);
lit_magic_string_id_t symbol_id = (lit_magic_string_id_t) curr_property_p->value;
lit_magic_string_id_t symbol_id = (lit_magic_string_id_t) curr_property_p->magic_string_id;
symbol_p->u.hash = (uint16_t) ((symbol_id << ECMA_GLOBAL_SYMBOL_SHIFT) | ECMA_GLOBAL_SYMBOL_FLAG);
value = ecma_make_symbol_value (symbol_p);
break;
}
case ECMA_BUILTIN_PROPERTY_INTRINSIC_PROPERTY:
{
value = ecma_op_object_get_by_magic_id (ecma_builtin_get (ECMA_BUILTIN_ID_INTRINSIC_OBJECT),
(lit_magic_string_id_t) curr_property_p->value);
break;
}
#endif /* ENABLED (JERRY_ES2015) */
case ECMA_BUILTIN_PROPERTY_OBJECT:
{