@@ -531,14 +531,22 @@ ecma_value_t
531
531
ecma_op_to_object (ecma_value_t value ) /**< ecma value */
532
532
{
533
533
ecma_check_value_type_is_spec_defined (value );
534
+ ecma_builtin_id_t proto_id = ECMA_BUILTIN_ID_OBJECT_PROTOTYPE ;
535
+ uint16_t lit_id ;
534
536
535
537
if (ecma_is_value_number (value ))
536
538
{
537
- return ecma_op_create_number_object (value );
539
+ #if ENABLED (JERRY_BUILTIN_NUMBER )
540
+ proto_id = ECMA_BUILTIN_ID_NUMBER_PROTOTYPE ;
541
+ #endif /* ENABLED (JERRY_BUILTIN_NUMBER) */
542
+ lit_id = LIT_MAGIC_STRING_NUMBER_UL ;
538
543
}
539
544
else if (ecma_is_value_string (value ))
540
545
{
541
- return ecma_op_create_string_object (& value , 1 );
546
+ #if ENABLED (JERRY_BUILTIN_STRING )
547
+ proto_id = ECMA_BUILTIN_ID_STRING_PROTOTYPE ;
548
+ #endif /* ENABLED (JERRY_BUILTIN_STRING) */
549
+ lit_id = LIT_MAGIC_STRING_STRING_UL ;
542
550
}
543
551
else if (ecma_is_value_object (value ))
544
552
{
@@ -547,7 +555,8 @@ ecma_op_to_object (ecma_value_t value) /**< ecma value */
547
555
#if ENABLED (JERRY_ESNEXT )
548
556
else if (ecma_is_value_symbol (value ))
549
557
{
550
- return ecma_op_create_symbol_object (value );
558
+ proto_id = ECMA_BUILTIN_ID_SYMBOL_PROTOTYPE ;
559
+ lit_id = LIT_MAGIC_STRING_SYMBOL_UL ;
551
560
}
552
561
#endif /* ENABLED (JERRY_ESNEXT) */
553
562
#if ENABLED (JERRY_BUILTIN_BIGINT )
@@ -566,12 +575,37 @@ ecma_op_to_object (ecma_value_t value) /**< ecma value */
566
575
else
567
576
{
568
577
JERRY_ASSERT (ecma_is_value_boolean (value ));
569
-
570
- return ecma_op_create_boolean_object (value );
578
+ #if ENABLED (JERRY_BUILTIN_BOOLEAN )
579
+ proto_id = ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE ;
580
+ #endif /* ENABLED (JERRY_BUILTIN_BOOLEAN) */
581
+ lit_id = LIT_MAGIC_STRING_BOOLEAN_UL ;
571
582
}
572
583
}
584
+
585
+ return ecma_op_create_class_object (proto_id , value , lit_id );
573
586
} /* ecma_op_to_object */
574
587
588
+ /**
589
+ * Create a ECMA_OBJECT_TYPE_CLASS object from the given arguments.
590
+ *
591
+ * @return ecma_value - constructed object
592
+ */
593
+ ecma_value_t
594
+ ecma_op_create_class_object (ecma_builtin_id_t proto_id , /**< prototype id */
595
+ ecma_value_t value , /**< ecma value */
596
+ uint16_t class_id ) /**< magic string id */
597
+ {
598
+ ecma_object_t * object_p = ecma_create_object (ecma_builtin_get (proto_id ),
599
+ sizeof (ecma_extended_object_t ),
600
+ ECMA_OBJECT_TYPE_CLASS );
601
+
602
+ ecma_extended_object_t * ext_object_p = (ecma_extended_object_t * ) object_p ;
603
+ ext_object_p -> u .class_prop .class_id = class_id ;
604
+ ext_object_p -> u .class_prop .u .value = ecma_copy_value_if_not_object (value );
605
+
606
+ return ecma_make_object_value (object_p );
607
+ } /* ecma_op_create_class_object */
608
+
575
609
/**
576
610
* FromPropertyDescriptor operation.
577
611
*
0 commit comments