Skip to content

Commit 6f1ce8d

Browse files
committed
Improve the construction of "length" built-in strings.
The "length" property name is the most frequently used built-in string and also frequently created by various hot-paths. New functions are added to improve the speed of the "length" string creation. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
1 parent b4bba2e commit 6f1ce8d

17 files changed

+131
-84
lines changed

jerry-core/ecma/base/ecma-helpers-string.c

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,21 @@ ecma_init_ecma_string_from_uint32 (ecma_string_t *string_desc_p, /**< ecma-strin
183183
string_desc_p->u.uint32_number = uint32_number;
184184
} /* ecma_init_ecma_string_from_uint32 */
185185

186+
/**
187+
* Initialize a length ecma-string
188+
*/
189+
inline void __attr_always_inline___
190+
ecma_init_ecma_length_string (ecma_string_t *string_desc_p) /**< ecma-string */
191+
{
192+
JERRY_ASSERT (lit_utf8_string_calc_hash ((const lit_utf8_byte_t *) "length", 6) == LIT_STRING_LENGTH_HASH);
193+
194+
string_desc_p->refs_and_container = ECMA_STRING_CONTAINER_MAGIC_STRING | ECMA_STRING_REF_ONE;
195+
string_desc_p->hash = LIT_STRING_LENGTH_HASH;
196+
197+
string_desc_p->u.common_field = 0;
198+
string_desc_p->u.magic_string_id = LIT_MAGIC_STRING_LENGTH;
199+
} /* ecma_init_ecma_length_string */
200+
186201
/**
187202
* Allocate new ecma-string and fill it with ecma-number
188203
*
@@ -280,6 +295,20 @@ ecma_new_ecma_string_from_magic_string_ex_id (lit_magic_string_ex_id_t id) /**<
280295
return string_desc_p;
281296
} /* ecma_new_ecma_string_from_magic_string_ex_id */
282297

298+
/**
299+
* Allocate new ecma-string and fill it with reference to length magic string
300+
*
301+
* @return pointer to ecma-string descriptor
302+
*/
303+
ecma_string_t *
304+
ecma_new_ecma_length_string (void)
305+
{
306+
ecma_string_t *string_desc_p = ecma_alloc_string ();
307+
ecma_init_ecma_length_string (string_desc_p);
308+
309+
return string_desc_p;
310+
} /* ecma_new_ecma_length_string */
311+
283312
/**
284313
* Concatenate ecma-strings
285314
*
@@ -761,6 +790,32 @@ ecma_string_is_empty (const ecma_string_t *str_p) /**< ecma-string */
761790
&& str_p->u.magic_string_id == LIT_MAGIC_STRING__EMPTY);
762791
} /* ecma_string_is_empty */
763792

793+
/**
794+
* Checks whether the string equals to "length".
795+
*
796+
* @return true if the string equals to "length"
797+
* false otherwise
798+
*/
799+
inline bool __attr_always_inline___
800+
ecma_string_is_length (const ecma_string_t *string_p) /**< property name */
801+
{
802+
ecma_string_container_t container = ECMA_STRING_GET_CONTAINER (string_p);
803+
804+
if (container == ECMA_STRING_CONTAINER_MAGIC_STRING)
805+
{
806+
return string_p->u.magic_string_id == LIT_MAGIC_STRING_LENGTH;
807+
}
808+
809+
if (container != ECMA_STRING_CONTAINER_HEAP_UTF8_STRING
810+
|| string_p->u.utf8_string.size != 6
811+
|| string_p->hash != LIT_STRING_LENGTH_HASH)
812+
{
813+
return false;
814+
}
815+
816+
return !strncmp ((char *) (string_p + 1), "length", 6);
817+
} /* ecma_string_is_length */
818+
764819
/**
765820
* Long path part of ecma-string to ecma-string comparison routine
766821
*

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ extern ecma_string_t *ecma_new_ecma_string_from_uint32 (uint32_t);
168168
extern ecma_string_t *ecma_new_ecma_string_from_number (ecma_number_t);
169169
extern ecma_string_t *ecma_new_ecma_string_from_magic_string_id (lit_magic_string_id_t);
170170
extern ecma_string_t *ecma_new_ecma_string_from_magic_string_ex_id (lit_magic_string_ex_id_t);
171+
extern ecma_string_t *ecma_new_ecma_length_string ();
171172
extern ecma_string_t *ecma_concat_ecma_strings (ecma_string_t *, ecma_string_t *);
172173
extern void ecma_ref_ecma_string (ecma_string_t *);
173174
extern void ecma_deref_ecma_string (ecma_string_t *);
@@ -179,7 +180,9 @@ ecma_string_copy_to_utf8_buffer (const ecma_string_t *, lit_utf8_byte_t *, lit_u
179180
extern void ecma_string_to_utf8_bytes (const ecma_string_t *, lit_utf8_byte_t *, lit_utf8_size_t);
180181
extern const lit_utf8_byte_t *ecma_string_raw_chars (const ecma_string_t *, lit_utf8_size_t *, bool *);
181182
extern void ecma_init_ecma_string_from_uint32 (ecma_string_t *, uint32_t);
183+
extern void ecma_init_ecma_length_string (ecma_string_t *);
182184
extern bool ecma_string_is_empty (const ecma_string_t *);
185+
extern bool ecma_string_is_length (const ecma_string_t *);
183186

184187
extern bool ecma_compare_ecma_strings_equal_hashes (const ecma_string_t *, const ecma_string_t *);
185188
extern bool ecma_compare_ecma_strings (const ecma_string_t *, const ecma_string_t *);

jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.c

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ ecma_builtin_array_prototype_helper_set_length (ecma_object_t *object, /**< obje
6060
ecma_number_t length) /**< new length */
6161
{
6262
ecma_value_t ret_value;
63-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
63+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
6464

6565
ecma_value_t length_value = ecma_make_number_value (length);
6666
ret_value = ecma_op_object_put (object,
@@ -145,7 +145,7 @@ ecma_builtin_array_prototype_object_to_locale_string (const ecma_value_t this_ar
145145

146146
ecma_object_t *obj_p = ecma_get_object_from_value (obj_value);
147147

148-
ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
148+
ecma_string_t *length_magic_string_p = ecma_new_ecma_length_string ();
149149

150150
/* 2. */
151151
ECMA_TRY_CATCH (length_value,
@@ -369,7 +369,7 @@ ecma_builtin_array_prototype_join (const ecma_value_t this_arg, /**< this argume
369369

370370
ecma_object_t *obj_p = ecma_get_object_from_value (obj_value);
371371

372-
ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
372+
ecma_string_t *length_magic_string_p = ecma_new_ecma_length_string ();
373373

374374
/* 2. */
375375
ECMA_TRY_CATCH (length_value,
@@ -474,7 +474,7 @@ ecma_builtin_array_prototype_object_pop (ecma_value_t this_arg) /**< this argume
474474
ret_value);
475475

476476
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
477-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
477+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
478478

479479
/* 2. */
480480
ECMA_TRY_CATCH (len_value,
@@ -555,7 +555,7 @@ ecma_builtin_array_prototype_object_push (ecma_value_t this_arg, /**< this argum
555555
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this_value);
556556

557557
/* 2. */
558-
ecma_string_t *length_str_p = ecma_new_ecma_string_from_magic_string_id (LIT_MAGIC_STRING_LENGTH);
558+
ecma_string_t *length_str_p = ecma_new_ecma_length_string ();
559559

560560
ECMA_TRY_CATCH (length_value, ecma_op_object_get (obj_p, length_str_p), ret_value);
561561

@@ -624,7 +624,7 @@ ecma_builtin_array_prototype_object_reverse (ecma_value_t this_arg) /**< this ar
624624
ret_value);
625625

626626
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
627-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
627+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
628628

629629
/* 2. */
630630
ECMA_TRY_CATCH (len_value,
@@ -720,7 +720,7 @@ ecma_builtin_array_prototype_object_shift (ecma_value_t this_arg) /**< this argu
720720
ret_value);
721721

722722
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
723-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
723+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
724724

725725
/* 2. */
726726
ECMA_TRY_CATCH (len_value,
@@ -835,7 +835,7 @@ ecma_builtin_array_prototype_object_slice (ecma_value_t this_arg, /**< 'this' ar
835835
ret_value);
836836

837837
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
838-
ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
838+
ecma_string_t *length_magic_string_p = ecma_new_ecma_length_string ();
839839

840840
ECMA_TRY_CATCH (len_value,
841841
ecma_op_object_get (obj_p, length_magic_string_p),
@@ -1205,7 +1205,7 @@ ecma_builtin_array_prototype_object_sort (ecma_value_t this_arg, /**< this argum
12051205
ret_value);
12061206

12071207
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
1208-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
1208+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
12091209

12101210
ECMA_TRY_CATCH (len_value,
12111211
ecma_op_object_get (obj_p, magic_string_length_p),
@@ -1359,7 +1359,7 @@ ecma_builtin_array_prototype_object_splice (ecma_value_t this_arg, /**< this arg
13591359
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
13601360

13611361
/* 3. */
1362-
ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
1362+
ecma_string_t *length_magic_string_p = ecma_new_ecma_length_string ();
13631363

13641364
ECMA_TRY_CATCH (len_value,
13651365
ecma_op_object_get (obj_p, length_magic_string_p),
@@ -1646,7 +1646,7 @@ ecma_builtin_array_prototype_object_unshift (ecma_value_t this_arg, /**< this ar
16461646
ret_value);
16471647

16481648
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
1649-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
1649+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
16501650

16511651
/* 2. */
16521652
ECMA_TRY_CATCH (len_value,
@@ -1742,7 +1742,7 @@ ecma_builtin_array_prototype_object_index_of (ecma_value_t this_arg, /**< this a
17421742
ret_value);
17431743

17441744
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
1745-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
1745+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
17461746

17471747
/* 2. */
17481748
ECMA_TRY_CATCH (len_value,
@@ -1838,7 +1838,7 @@ ecma_builtin_array_prototype_object_last_index_of (ecma_value_t this_arg, /**< t
18381838
ret_value);
18391839

18401840
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
1841-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
1841+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
18421842

18431843
/* 2. */
18441844
ECMA_TRY_CATCH (len_value,
@@ -1983,7 +1983,7 @@ ecma_builtin_array_prototype_object_every (ecma_value_t this_arg, /**< this argu
19831983
ret_value);
19841984

19851985
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
1986-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
1986+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
19871987

19881988
/* 2. */
19891989
ECMA_TRY_CATCH (len_value,
@@ -2081,7 +2081,7 @@ ecma_builtin_array_prototype_object_some (ecma_value_t this_arg, /**< this argum
20812081
ret_value);
20822082

20832083
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
2084-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
2084+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
20852085

20862086
/* 2. */
20872087
ECMA_TRY_CATCH (len_value,
@@ -2178,7 +2178,7 @@ ecma_builtin_array_prototype_object_for_each (ecma_value_t this_arg, /**< this a
21782178
ret_value);
21792179

21802180
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
2181-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
2181+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
21822182

21832183
/* 2. */
21842184
ECMA_TRY_CATCH (len_value,
@@ -2270,7 +2270,7 @@ ecma_builtin_array_prototype_object_map (ecma_value_t this_arg, /**< this argume
22702270
ret_value);
22712271

22722272
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
2273-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
2273+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
22742274

22752275
/* 2. */
22762276
ECMA_TRY_CATCH (len_value,
@@ -2380,7 +2380,7 @@ ecma_builtin_array_prototype_object_filter (ecma_value_t this_arg, /**< this arg
23802380
ret_value);
23812381

23822382
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
2383-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
2383+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
23842384

23852385
/* 2. */
23862386
ECMA_TRY_CATCH (len_value,
@@ -2501,7 +2501,7 @@ ecma_builtin_array_prototype_object_reduce (ecma_value_t this_arg, /**< this arg
25012501
ret_value);
25022502

25032503
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
2504-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
2504+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
25052505

25062506
/* 2. */
25072507
ECMA_TRY_CATCH (len_value,
@@ -2643,7 +2643,7 @@ ecma_builtin_array_prototype_object_reduce_right (ecma_value_t this_arg, /**< th
26432643
ret_value);
26442644

26452645
ecma_object_t *obj_p = ecma_get_object_from_value (obj_this);
2646-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
2646+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
26472647

26482648
/* 2. */
26492649
ECMA_TRY_CATCH (len_value,

jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ ecma_builtin_function_prototype_object_apply (ecma_value_t this_arg, /**< this a
110110
else
111111
{
112112
ecma_object_t *obj_p = ecma_get_object_from_value (arg2);
113-
ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
113+
ecma_string_t *length_magic_string_p = ecma_new_ecma_length_string ();
114114

115115
/* 4. */
116116
ECMA_TRY_CATCH (length_value,
@@ -286,7 +286,7 @@ ecma_builtin_function_prototype_object_bind (ecma_value_t this_arg, /**< this ar
286286

287287
/* 16. */
288288
ecma_number_t length = ECMA_NUMBER_ZERO;
289-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
289+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
290290

291291
/* 15. */
292292
if (ecma_object_get_class_name (this_arg_obj_p) == LIT_MAGIC_STRING_FUNCTION_UL)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ ecma_builtin_helper_array_concat_value (ecma_object_t *obj_p, /**< array */
335335
if (ecma_is_value_object (value)
336336
&& (ecma_object_get_class_name (ecma_get_object_from_value (value)) == LIT_MAGIC_STRING_ARRAY_UL))
337337
{
338-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
338+
ecma_string_t *magic_string_length_p = ecma_new_ecma_length_string ();
339339
/* 5.b.ii */
340340
ECMA_TRY_CATCH (arg_len_value,
341341
ecma_op_object_get (ecma_get_object_from_value (value),

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,7 @@ ecma_builtin_json_stringify (ecma_value_t this_arg, /**< 'this' argument */
825825
/* 4.b */
826826
else if (ecma_object_get_class_name (obj_p) == LIT_MAGIC_STRING_ARRAY_UL)
827827
{
828-
ecma_string_t *length_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
828+
ecma_string_t *length_str_p = ecma_new_ecma_length_string ();
829829

830830
ECMA_TRY_CATCH (array_length,
831831
ecma_op_object_get (obj_p, length_str_p),
@@ -1624,7 +1624,7 @@ ecma_builtin_json_array (ecma_object_t *obj_p, /**< the array object*/
16241624
/* 5. */
16251625
ecma_collection_header_t *partial_p = ecma_new_values_collection (NULL, 0, true);
16261626

1627-
ecma_string_t *length_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
1627+
ecma_string_t *length_str_p = ecma_new_ecma_length_string ();
16281628

16291629
/* 6. */
16301630
ECMA_TRY_CATCH (array_length,

jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,7 @@ ecma_builtin_string_prototype_object_replace_get_string (ecma_builtin_replace_se
774774
ecma_value_t match_value) /**< returned match value */
775775
{
776776
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
777-
ecma_string_t *length_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
777+
ecma_string_t *length_string_p = ecma_new_ecma_length_string ();
778778
ecma_object_t *match_object_p = ecma_get_object_from_value (match_value);
779779

780780
ECMA_TRY_CATCH (match_length_value,
@@ -1818,7 +1818,7 @@ ecma_builtin_string_prototype_object_split (ecma_value_t this_arg, /**< this arg
18181818
/* 13.c.iii.5 */
18191819
start_pos = end_pos + match_str_length;
18201820

1821-
ecma_string_t *magic_length_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
1821+
ecma_string_t *magic_length_str_p = ecma_new_ecma_length_string ();
18221822

18231823
ECMA_TRY_CATCH (array_length_val,
18241824
ecma_op_object_get (match_array_obj_p, magic_length_str_p),

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

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,22 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */
135135
/** Initializing [[PrimitiveValue]] properties of built-in prototype objects */
136136
switch (obj_builtin_id)
137137
{
138+
#ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ARRAY_BUILTIN
139+
case ECMA_BUILTIN_ID_ARRAY_PROTOTYPE:
140+
{
141+
ecma_string_t *length_str_p = ecma_new_ecma_length_string ();
142+
143+
ecma_property_t *length_prop_p = ecma_create_named_data_property (obj_p,
144+
length_str_p,
145+
ECMA_PROPERTY_FLAG_WRITABLE);
146+
147+
ecma_set_named_data_property_value (length_prop_p, ecma_make_integer_value (0));
148+
149+
ecma_deref_ecma_string (length_str_p);
150+
break;
151+
}
152+
#endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ARRAY_BUILTIN */
153+
138154
#ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_STRING_BUILTIN
139155
case ECMA_BUILTIN_ID_STRING_PROTOTYPE:
140156
{
@@ -352,13 +368,7 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object *
352368
if (ecma_get_object_type (object_p) == ECMA_OBJECT_TYPE_FUNCTION
353369
&& ecma_builtin_function_is_routine (object_p))
354370
{
355-
ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
356-
357-
bool is_length_property = ecma_compare_ecma_strings (string_p, magic_string_length_p);
358-
359-
ecma_deref_ecma_string (magic_string_length_p);
360-
361-
if (is_length_property)
371+
if (ecma_string_is_length (string_p))
362372
{
363373
/*
364374
* Lazy instantiation of 'length' property
@@ -589,7 +599,7 @@ ecma_builtin_list_lazy_property_names (ecma_object_t *object_p, /**< a built-in
589599
ecma_collection_header_t *for_non_enumerable_p = separate_enumerable ? non_enum_collection_p : main_collection_p;
590600

591601
/* 'length' property is non-enumerable (ECMA-262 v5, 15) */
592-
ecma_string_t *name_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH);
602+
ecma_string_t *name_p = ecma_new_ecma_length_string ();
593603
ecma_append_to_values_collection (for_non_enumerable_p, ecma_make_string_value (name_p), true);
594604
ecma_deref_ecma_string (name_p);
595605
}

0 commit comments

Comments
 (0)