Skip to content

Commit ef35c03

Browse files
authored
Remove class id storing for class objects (#4645)
The two bytes which stored the id is free to use. Currently the only exception is containers. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg [email protected]
1 parent 2381078 commit ef35c03

22 files changed

+227
-207
lines changed

jerry-core/api/jerry.c

Lines changed: 72 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,6 @@ jerry_parse (const jerry_char_t *source_p, /**< script source */
486486

487487
ecma_extended_object_t *ext_object_p = (ecma_extended_object_t *) object_p;
488488
ext_object_p->u.cls.type = ECMA_OBJECT_CLASS_SCRIPT;
489-
ext_object_p->u.cls.u2.id = LIT_MAGIC_STRING_SCRIPT_UL;
490489
ECMA_SET_INTERNAL_VALUE_POINTER (ext_object_p->u.cls.u3.value, bytecode_data_p);
491490

492491
return ecma_make_object_value (object_p);
@@ -1254,6 +1253,75 @@ jerry_value_get_type (const jerry_value_t value) /**< input value to check */
12541253
}
12551254
} /* jerry_value_get_type */
12561255

1256+
/**
1257+
* Used by jerry_object_get_type to get the type of class objects
1258+
*/
1259+
static const uint8_t jerry_class_object_type[] =
1260+
{
1261+
/* These objects require custom property resolving. */
1262+
JERRY_OBJECT_TYPE_STRING, /**< type of ECMA_OBJECT_CLASS_STRING */
1263+
JERRY_OBJECT_TYPE_ARGUMENTS, /**< type of ECMA_OBJECT_CLASS_ARGUMENTS */
1264+
#if JERRY_BUILTIN_TYPEDARRAY
1265+
JERRY_OBJECT_TYPE_TYPEDARRAY, /**< type of ECMA_OBJECT_CLASS_TYPEDARRAY */
1266+
#endif /* JERRY_BUILTIN_TYPEDARRAY */
1267+
1268+
/* These objects are marked by Garbage Collector. */
1269+
#if JERRY_ESNEXT
1270+
JERRY_OBJECT_TYPE_GENERATOR, /**< type of ECMA_OBJECT_CLASS_GENERATOR */
1271+
JERRY_OBJECT_TYPE_GENERATOR, /**< type of ECMA_OBJECT_CLASS_ASYNC_GENERATOR */
1272+
JERRY_OBJECT_TYPE_ITERATOR, /**< type of ECMA_OBJECT_CLASS_ARRAY_ITERATOR */
1273+
JERRY_OBJECT_TYPE_ITERATOR, /**< type of ECMA_OBJECT_CLASS_SET_ITERATOR */
1274+
JERRY_OBJECT_TYPE_ITERATOR, /**< type of ECMA_OBJECT_CLASS_MAP_ITERATOR */
1275+
#if JERRY_BUILTIN_REGEXP
1276+
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_REGEXP_STRING_ITERATOR */
1277+
#endif /* JERRY_BUILTIN_REGEXP */
1278+
#endif /* JERRY_ESNEXT */
1279+
#if JERRY_MODULE_SYSTEM
1280+
JERRY_OBJECT_TYPE_MODULE, /**< type of ECMA_OBJECT_CLASS_MODULE */
1281+
#endif
1282+
#if JERRY_BUILTIN_PROMISE
1283+
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_PROMISE */
1284+
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_PROMISE_CAPABILITY */
1285+
#endif /* JERRY_BUILTIN_PROMISE */
1286+
#if JERRY_BUILTIN_DATAVIEW
1287+
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_DATAVIEW */
1288+
#endif /* JERRY_BUILTIN_DATAVIEW */
1289+
#if JERRY_BUILTIN_CONTAINER
1290+
JERRY_OBJECT_TYPE_CONTAINER, /**< type of ECMA_OBJECT_CLASS_CONTAINER */
1291+
#endif /* JERRY_BUILTIN_CONTAINER */
1292+
1293+
/* Normal objects. */
1294+
JERRY_OBJECT_TYPE_BOOLEAN, /**< type of ECMA_OBJECT_CLASS_BOOLEAN */
1295+
JERRY_OBJECT_TYPE_NUMBER, /**< type of ECMA_OBJECT_CLASS_NUMBER */
1296+
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_ERROR */
1297+
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_INTERNAL_OBJECT */
1298+
#if JERRY_PARSER
1299+
JERRY_OBJECT_TYPE_SCRIPT, /**< type of ECMA_OBJECT_CLASS_SCRIPT */
1300+
#endif /* JERRY_PARSER */
1301+
#if JERRY_BUILTIN_DATE
1302+
JERRY_OBJECT_TYPE_DATE, /**< type of ECMA_OBJECT_CLASS_DATE */
1303+
#endif /* JERRY_BUILTIN_DATE */
1304+
#if JERRY_BUILTIN_REGEXP
1305+
JERRY_OBJECT_TYPE_REGEXP, /**< type of ECMA_OBJECT_CLASS_REGEXP */
1306+
#endif /* JERRY_BUILTIN_REGEXP */
1307+
#if JERRY_ESNEXT
1308+
JERRY_OBJECT_TYPE_SYMBOL, /**< type of ECMA_OBJECT_CLASS_SYMBOL */
1309+
JERRY_OBJECT_TYPE_ITERATOR, /**< type of ECMA_OBJECT_CLASS_STRING_ITERATOR */
1310+
#endif /* JERRY_ESNEXT */
1311+
#if JERRY_BUILTIN_TYPEDARRAY
1312+
JERRY_OBJECT_TYPE_GENERIC, /**< type of ECMA_OBJECT_CLASS_ARRAY_BUFFER */
1313+
#endif /* JERRY_BUILTIN_TYPEDARRAY */
1314+
#if JERRY_BUILTIN_BIGINT
1315+
JERRY_OBJECT_TYPE_BIGINT, /**< type of ECMA_OBJECT_CLASS_BIGINT */
1316+
#endif /* JERRY_BUILTIN_BIGINT */
1317+
#if JERRY_BUILTIN_WEAKREF
1318+
JERRY_OBJECT_TYPE_WEAKREF, /**< type of ECMA_OBJECT_CLASS_WEAKREF */
1319+
#endif /* JERRY_BUILTIN_WEAKREF */
1320+
};
1321+
1322+
JERRY_STATIC_ASSERT (sizeof (jerry_class_object_type) == ECMA_OBJECT_CLASS__MAX,
1323+
jerry_class_object_type_must_have_object_class_max_elements);
1324+
12571325
/**
12581326
* Get the object type of the given value
12591327
*
@@ -1293,101 +1361,8 @@ jerry_object_get_type (const jerry_value_t value) /**< input value to check */
12931361
#endif /* JERRY_ESNEXT */
12941362
case ECMA_OBJECT_TYPE_CLASS:
12951363
{
1296-
switch (ext_obj_p->u.cls.type)
1297-
{
1298-
case ECMA_OBJECT_CLASS_ARGUMENTS:
1299-
{
1300-
return JERRY_OBJECT_TYPE_ARGUMENTS;
1301-
}
1302-
#if JERRY_BUILTIN_TYPEDARRAY
1303-
case ECMA_OBJECT_CLASS_TYPEDARRAY:
1304-
case ECMA_OBJECT_CLASS_TYPEDARRAY_WITH_INFO:
1305-
{
1306-
return JERRY_OBJECT_TYPE_TYPEDARRAY;
1307-
}
1308-
#endif /* JERRY_BUILTIN_TYPEDARRAY */
1309-
#if JERRY_PARSER
1310-
case ECMA_OBJECT_CLASS_SCRIPT:
1311-
{
1312-
return JERRY_OBJECT_TYPE_SCRIPT;
1313-
}
1314-
#endif /* JERRY_PARSER */
1315-
case ECMA_OBJECT_CLASS_BOOLEAN:
1316-
{
1317-
return JERRY_OBJECT_TYPE_BOOLEAN;
1318-
}
1319-
case ECMA_OBJECT_CLASS_STRING:
1320-
{
1321-
return JERRY_OBJECT_TYPE_STRING;
1322-
}
1323-
case ECMA_OBJECT_CLASS_NUMBER:
1324-
{
1325-
return JERRY_OBJECT_TYPE_NUMBER;
1326-
}
1327-
#if JERRY_BUILTIN_DATE
1328-
case ECMA_OBJECT_CLASS_DATE:
1329-
{
1330-
return JERRY_OBJECT_TYPE_DATE;
1331-
}
1332-
#endif /* JERRY_BUILTIN_DATE */
1333-
#if JERRY_BUILTIN_REGEXP
1334-
case ECMA_OBJECT_CLASS_REGEXP:
1335-
{
1336-
return JERRY_OBJECT_TYPE_REGEXP;
1337-
}
1338-
#endif /* JERRY_BUILTIN_REGEXP */
1339-
#if JERRY_ESNEXT
1340-
case ECMA_OBJECT_CLASS_SYMBOL:
1341-
{
1342-
return JERRY_OBJECT_TYPE_SYMBOL;
1343-
}
1344-
case ECMA_OBJECT_CLASS_GENERATOR:
1345-
case ECMA_OBJECT_CLASS_ASYNC_GENERATOR:
1346-
{
1347-
return JERRY_OBJECT_TYPE_GENERATOR;
1348-
}
1349-
case ECMA_OBJECT_CLASS_ARRAY_ITERATOR:
1350-
#if JERRY_BUILTIN_SET
1351-
case ECMA_OBJECT_CLASS_SET_ITERATOR:
1352-
#endif /* JERRY_BUILTIN_SET */
1353-
#if JERRY_BUILTIN_MAP
1354-
case ECMA_OBJECT_CLASS_MAP_ITERATOR:
1355-
#endif /* JERRY_BUILTIN_MAP */
1356-
case ECMA_OBJECT_CLASS_STRING_ITERATOR:
1357-
{
1358-
return JERRY_OBJECT_TYPE_ITERATOR;
1359-
}
1360-
#endif /* JERRY_ESNEXT */
1361-
#if JERRY_MODULE_SYSTEM
1362-
case ECMA_OBJECT_CLASS_MODULE:
1363-
{
1364-
return JERRY_OBJECT_TYPE_MODULE;
1365-
}
1366-
#endif /* JERRY_MODULE_SYSTEM */
1367-
#if JERRY_BUILTIN_CONTAINER
1368-
case ECMA_OBJECT_CLASS_CONTAINER:
1369-
{
1370-
return JERRY_OBJECT_TYPE_CONTAINER;
1371-
}
1372-
#endif /* JERRY_BUILTIN_CONTAINER */
1373-
#if JERRY_BUILTIN_BIGINT
1374-
case ECMA_OBJECT_CLASS_BIGINT:
1375-
{
1376-
return JERRY_OBJECT_TYPE_BIGINT;
1377-
}
1378-
#endif /* JERRY_BUILTIN_BIGINT */
1379-
#if JERRY_BUILTIN_WEAKREF
1380-
case ECMA_OBJECT_CLASS_WEAKREF:
1381-
{
1382-
return JERRY_OBJECT_TYPE_WEAKREF;
1383-
}
1384-
#endif /* JERRY_BUILTIN_WEAKREF */
1385-
default:
1386-
{
1387-
break;
1388-
}
1389-
}
1390-
break;
1364+
JERRY_ASSERT (ext_obj_p->u.cls.type < ECMA_OBJECT_CLASS__MAX);
1365+
return jerry_class_object_type[ext_obj_p->u.cls.type];
13911366
}
13921367
default:
13931368
{
@@ -3386,7 +3361,6 @@ jerry_set_internal_property (const jerry_value_t obj_val, /**< object value */
33863361
{
33873362
ecma_extended_object_t *container_p = (ecma_extended_object_t *) internal_object_p;
33883363
container_p->u.cls.type = ECMA_OBJECT_CLASS_INTERNAL_OBJECT;
3389-
container_p->u.cls.u2.id = LIT_MAGIC_STRING_OBJECT_UL;
33903364
}
33913365

33923366
value_p->value = ecma_make_object_value (internal_object_p);
@@ -6108,7 +6082,7 @@ jerry_get_container_type (const jerry_value_t value) /**< the container object *
61086082

61096083
if (ecma_object_class_is (obj_p, ECMA_OBJECT_CLASS_CONTAINER))
61106084
{
6111-
switch (((ecma_extended_object_t *) obj_p)->u.cls.u2.id)
6085+
switch (((ecma_extended_object_t *) obj_p)->u.cls.u2.container_id)
61126086
{
61136087
#if JERRY_BUILTIN_MAP
61146088
case LIT_MAGIC_STRING_MAP_UL:

jerry-core/ecma/base/ecma-gc.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,6 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
728728
}
729729
#if JERRY_BUILTIN_TYPEDARRAY
730730
case ECMA_OBJECT_CLASS_TYPEDARRAY:
731-
case ECMA_OBJECT_CLASS_TYPEDARRAY_WITH_INFO:
732731
{
733732
ecma_gc_set_object_visited (ecma_typedarray_get_arraybuffer (object_p));
734733
break;
@@ -770,28 +769,28 @@ ecma_gc_mark (ecma_object_t *object_p) /**< object to mark from */
770769
case ECMA_OBJECT_CLASS_CONTAINER:
771770
{
772771
#if JERRY_BUILTIN_MAP
773-
if (ext_object_p->u.cls.u2.id == LIT_MAGIC_STRING_MAP_UL)
772+
if (ext_object_p->u.cls.u2.container_id == LIT_MAGIC_STRING_MAP_UL)
774773
{
775774
ecma_gc_mark_map_object (object_p);
776775
break;
777776
}
778777
#endif /* JERRY_BUILTIN_MAP */
779778
#if JERRY_BUILTIN_WEAKMAP
780-
if (ext_object_p->u.cls.u2.id == LIT_MAGIC_STRING_WEAKMAP_UL)
779+
if (ext_object_p->u.cls.u2.container_id == LIT_MAGIC_STRING_WEAKMAP_UL)
781780
{
782781
ecma_gc_mark_weakmap_object (object_p);
783782
break;
784783
}
785784
#endif /* JERRY_BUILTIN_WEAKMAP */
786785
#if JERRY_BUILTIN_SET
787-
if (ext_object_p->u.cls.u2.id == LIT_MAGIC_STRING_SET_UL)
786+
if (ext_object_p->u.cls.u2.container_id == LIT_MAGIC_STRING_SET_UL)
788787
{
789788
ecma_gc_mark_set_object (object_p);
790789
break;
791790
}
792791
#endif /* JERRY_BUILTIN_SET */
793792
#if JERRY_BUILTIN_WEAKSET
794-
JERRY_ASSERT (ext_object_p->u.cls.u2.id == LIT_MAGIC_STRING_WEAKSET_UL);
793+
JERRY_ASSERT (ext_object_p->u.cls.u2.container_id == LIT_MAGIC_STRING_WEAKSET_UL);
795794
#endif /* JERRY_BUILTIN_WEAKSET */
796795
break;
797796
}
@@ -1591,9 +1590,12 @@ ecma_gc_free_object (ecma_object_t *object_p) /**< object to free */
15911590
break;
15921591
}
15931592
#if JERRY_BUILTIN_TYPEDARRAY
1594-
case ECMA_OBJECT_CLASS_TYPEDARRAY_WITH_INFO:
1593+
case ECMA_OBJECT_CLASS_TYPEDARRAY:
15951594
{
1596-
ext_object_size = sizeof (ecma_extended_typedarray_object_t);
1595+
if (ext_object_p->u.cls.u2.typedarray_flags & ECMA_TYPEDARRAY_IS_EXTENDED)
1596+
{
1597+
ext_object_size = sizeof (ecma_extended_typedarray_object_t);
1598+
}
15971599
break;
15981600
}
15991601
#endif /* JERRY_BUILTIN_TYPEDARRAY */

jerry-core/ecma/base/ecma-globals.h

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,10 @@ typedef enum
698698

699699
/**
700700
* Types of objects with class property.
701+
*
702+
* Note:
703+
* when this type is changed, both ecma_class_object_magic_string_id
704+
* and jerry_class_object_type must be updated as well
701705
*/
702706
typedef enum
703707
{
@@ -706,7 +710,6 @@ typedef enum
706710
ECMA_OBJECT_CLASS_ARGUMENTS, /**< Arguments object (10.6) */
707711
#if JERRY_BUILTIN_TYPEDARRAY
708712
ECMA_OBJECT_CLASS_TYPEDARRAY, /**< TypedArray which does NOT need extra space to store length and offset */
709-
ECMA_OBJECT_CLASS_TYPEDARRAY_WITH_INFO, /**< TypedArray which NEEDS extra space to store length and offset */
710713
#endif /* JERRY_BUILTIN_TYPEDARRAY */
711714

712715
/* These objects are marked by Garbage Collector. */
@@ -1037,10 +1040,10 @@ typedef struct
10371040
uint8_t regexp_string_iterator_flags; /**< flags for RegExp string iterator */
10381041
#endif /* JERRY_ESNEXT */
10391042
#if JERRY_BUILTIN_PROMISE
1040-
uint8_t promise_flags; /**< flags for Promise objects */
1043+
uint8_t promise_flags; /**< Promise object flags */
10411044
#endif /* JERRY_BUILTIN_PROMISE */
10421045
#if JERRY_BUILTIN_CONTAINER
1043-
uint8_t container_flags; /**< flags for container objects */
1046+
uint8_t container_flags; /**< container object flags */
10441047
#endif /* JERRY_BUILTIN_CONTAINER */
10451048
#if JERRY_BUILTIN_TYPEDARRAY
10461049
uint8_t array_buffer_flags; /**< ArrayBuffer flags */
@@ -1052,26 +1055,40 @@ typedef struct
10521055
*/
10531056
union
10541057
{
1055-
/* The ecma_object_get_class_name must handle those types which does not use id. */
1056-
uint16_t id; /**< magic string id of the class */
10571058
uint16_t formal_params_number; /**< for arguments: formal parameters number */
1059+
#if JERRY_ESNEXT
10581060
uint16_t iterator_index; /**< for %Iterator%: [[%Iterator%NextIndex]] property */
10591061
uint16_t executable_obj_flags; /**< executable object flags */
1062+
#endif /* JERRY_ESNEXT */
1063+
#if JERRY_BUILTIN_CONTAINER
1064+
uint16_t container_id; /**< magic string id of a container */
1065+
#endif /* JERRY_BUILTIN_CONTAINER */
1066+
#if JERRY_BUILTIN_TYPEDARRAY
1067+
uint16_t typedarray_flags; /**< typed array object flags */
1068+
#endif /* JERRY_BUILTIN_TYPEDARRAY */
10601069
} u2;
10611070
/**
10621071
* Description of 32 bit / value. These extra fields depend on the type.
10631072
*/
10641073
union
10651074
{
10661075
ecma_value_t value; /**< value of the object (e.g. boolean, number, string, etc.) */
1076+
#if !JERRY_ESNEXT
10671077
ecma_value_t date; /**< Date object [[DateValue]] internal property */
1078+
#endif /* !JERRY_ESNEXT */
10681079
ecma_value_t target; /**< [[ProxyTarget]] or [[WeakRefTarget]] internal property */
1069-
ecma_value_t head; /**< points to the async generator task queue head item */
1080+
#if JERRY_BUILTIN_PROMISE
10701081
ecma_value_t promise; /**< PromiseCapability[[Promise]] internal slot */
1071-
ecma_value_t arraybuffer; /**< for typedarray: internal arraybuffer */
1082+
#endif /* JERRY_BUILTIN_PROMISE */
1083+
#if JERRY_BUILTIN_TYPEDARRAY
1084+
ecma_value_t arraybuffer; /**< for typedarray: ArrayBuffer reference */
1085+
#endif /* JERRY_BUILTIN_TYPEDARRAY */
1086+
#if JERRY_ESNEXT
1087+
ecma_value_t head; /**< points to the async generator task queue head item */
10721088
ecma_value_t iterated_value; /**< for %Iterator%: [[IteratedObject]] property */
10731089
ecma_value_t spread_value; /**< for spread object: spreaded element */
10741090
int32_t tza; /**< TimeZone adjustment for date objects */
1091+
#endif /* JERRY_ESNEXT */
10751092
uint32_t length; /**< length related property (e.g. length of ArrayBuffer) */
10761093
uint32_t arguments_number; /**< for arguments: arguments number */
10771094
#if JERRY_MODULE_SYSTEM
@@ -2031,14 +2048,22 @@ typedef enum
20312048
} ecma_typedarray_type_t;
20322049

20332050
/**
2034-
* Extra information for ArrayBuffers.
2051+
* TypedArray flags.
2052+
*/
2053+
typedef enum
2054+
{
2055+
ECMA_TYPEDARRAY_IS_EXTENDED = (1u << 0), /* an ecma_extended_typedarray_object_t is allocated for the TypedArray */
2056+
} ecma_typedarray_flag_t;
2057+
2058+
/**
2059+
* ArrayBuffers flags.
20352060
*/
20362061
typedef enum
20372062
{
2038-
ECMA_ARRAYBUFFER_INTERNAL_MEMORY = 0u, /* ArrayBuffer memory is handled internally. */
2063+
ECMA_ARRAYBUFFER_INTERNAL_MEMORY = 0u, /* ArrayBuffer memory is handled internally. */
20392064
ECMA_ARRAYBUFFER_EXTERNAL_MEMORY = (1u << 0), /* ArrayBuffer created via jerry_create_arraybuffer_external. */
2040-
ECMA_ARRAYBUFFER_DETACHED = (1u << 1), /* ArrayBuffer has been detached */
2041-
} ecma_arraybuffer_extra_flag_t;
2065+
ECMA_ARRAYBUFFER_DETACHED = (1u << 1), /* ArrayBuffer has been detached */
2066+
} ecma_arraybuffer_flag_t;
20422067

20432068
/**
20442069
* Check whether the ArrayBuffer has external underlying buffer
@@ -2058,7 +2083,7 @@ typedef struct
20582083
{
20592084
ecma_extended_object_t extended_object; /**< extended object part */
20602085
void *buffer_p; /**< external buffer pointer */
2061-
ecma_object_native_free_callback_t free_cb; /**< the free callback for the above buffer pointer */
2086+
ecma_object_native_free_callback_t free_cb; /**< the free callback for the above buffer pointer */
20622087
} ecma_arraybuffer_external_info;
20632088

20642089
/**

jerry-core/ecma/builtin-objects/ecma-builtin-date.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,6 @@ ecma_builtin_date_create (ecma_number_t tv)
739739
ecma_date_object_t *date_object_p = (ecma_date_object_t *) obj_p;
740740
date_object_p->header.u.cls.type = ECMA_OBJECT_CLASS_DATE;
741741
date_object_p->header.u.cls.u1.date_flags = ECMA_DATE_TZA_NONE;
742-
date_object_p->header.u.cls.u2.id = LIT_MAGIC_STRING_DATE_UL;
743742
date_object_p->header.u.cls.u3.tza = 0;
744743
date_object_p->date_value = tv;
745744
#else /* !JERRY_ESNEXT */
@@ -751,7 +750,6 @@ ecma_builtin_date_create (ecma_number_t tv)
751750

752751
ecma_extended_object_t *ext_object_p = (ecma_extended_object_t *) obj_p;
753752
ext_object_p->u.cls.type = ECMA_OBJECT_CLASS_DATE;
754-
ext_object_p->u.cls.u2.id = LIT_MAGIC_STRING_DATE_UL;
755753
ECMA_SET_INTERNAL_VALUE_POINTER (ext_object_p->u.cls.u3.date, date_value_p);
756754
#endif /* JERRY_ESNEXT */
757755

jerry-core/ecma/builtin-objects/ecma-builtin-weakref.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ ecma_builtin_weakref_dispatch_construct (const ecma_value_t *arguments_list_p, /
8282
ecma_deref_object (proto_p);
8383
ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) object_p;
8484
ext_obj_p->u.cls.type = ECMA_OBJECT_CLASS_WEAKREF;
85-
ext_obj_p->u.cls.u2.id = LIT_MAGIC_STRING_WEAKREF_UL;
8685
ext_obj_p->u.cls.u3.target = arguments_list_p[0];
8786
ecma_op_object_set_weak (ecma_get_object_from_value (arguments_list_p[0]), object_p);
8887

0 commit comments

Comments
 (0)