@@ -531,14 +531,22 @@ ecma_value_t
531531ecma_op_to_object (ecma_value_t value ) /**< ecma value */
532532{
533533 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 ;
534536
535537 if (ecma_is_value_number (value ))
536538 {
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 ;
538543 }
539544 else if (ecma_is_value_string (value ))
540545 {
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 ;
542550 }
543551 else if (ecma_is_value_object (value ))
544552 {
@@ -547,7 +555,8 @@ ecma_op_to_object (ecma_value_t value) /**< ecma value */
547555#if ENABLED (JERRY_ESNEXT )
548556 else if (ecma_is_value_symbol (value ))
549557 {
550- return ecma_op_create_symbol_object (value );
558+ proto_id = ECMA_BUILTIN_ID_SYMBOL_PROTOTYPE ;
559+ lit_id = LIT_MAGIC_STRING_SYMBOL_UL ;
551560 }
552561#endif /* ENABLED (JERRY_ESNEXT) */
553562#if ENABLED (JERRY_BUILTIN_BIGINT )
@@ -566,12 +575,37 @@ ecma_op_to_object (ecma_value_t value) /**< ecma value */
566575 else
567576 {
568577 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 ;
571582 }
572583 }
584+
585+ return ecma_op_create_class_object (proto_id , value , lit_id );
573586} /* ecma_op_to_object */
574587
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+
575609/**
576610 * FromPropertyDescriptor operation.
577611 *
0 commit comments