@@ -806,6 +806,8 @@ ecma_module_connect_imports (ecma_module_t *module_p)
806806 const bool is_namespace_import = ecma_compare_ecma_string_to_magic_id (import_names_p -> imex_name_p ,
807807 LIT_MAGIC_STRING_ASTERIX_CHAR );
808808
809+ ecma_value_t prop_value ;
810+
809811 if (is_namespace_import )
810812 {
811813 result = ecma_module_create_namespace_object (import_node_p -> module_request_p );
@@ -814,11 +816,8 @@ ecma_module_connect_imports (ecma_module_t *module_p)
814816 return result ;
815817 }
816818
817- ecma_op_create_mutable_binding (local_env_p , import_names_p -> local_name_p , true /* is_deletable */ );
818- ecma_op_set_mutable_binding (local_env_p ,
819- import_names_p -> local_name_p ,
820- ecma_make_object_value (import_node_p -> module_request_p -> namespace_object_p ),
821- false /* is_strict */ );
819+ ecma_ref_object (import_node_p -> module_request_p -> namespace_object_p );
820+ prop_value = ecma_make_object_value (import_node_p -> module_request_p -> namespace_object_p );
822821 }
823822 else /* !is_namespace_import */
824823 {
@@ -838,18 +837,8 @@ ecma_module_connect_imports (ecma_module_t *module_p)
838837 if (record .module_p -> state == ECMA_MODULE_STATE_NATIVE )
839838 {
840839 ecma_object_t * object_p = record .module_p -> namespace_object_p ;
841- ecma_value_t prop_value = ecma_op_object_find_own (ecma_make_object_value (object_p ),
842- object_p ,
843- record .name_p );
840+ prop_value = ecma_op_object_find_own (ecma_make_object_value (object_p ), object_p , record .name_p );
844841 JERRY_ASSERT (ecma_is_value_found (prop_value ));
845-
846- ecma_op_create_mutable_binding (local_env_p , import_names_p -> local_name_p , true /* is_deletable */ );
847- ecma_op_set_mutable_binding (local_env_p ,
848- import_names_p -> local_name_p ,
849- prop_value ,
850- false /* is_strict */ );
851-
852- ecma_free_value (prop_value );
853842 }
854843 else
855844 {
@@ -861,20 +850,33 @@ ecma_module_connect_imports (ecma_module_t *module_p)
861850 }
862851
863852 ecma_object_t * ref_base_lex_env_p ;
864- ecma_value_t prop_value = ecma_op_get_value_lex_env_base (record .module_p -> scope_p ,
865- & ref_base_lex_env_p ,
866- record .name_p );
853+ prop_value = ecma_op_get_value_lex_env_base (record .module_p -> scope_p ,
854+ & ref_base_lex_env_p ,
855+ record .name_p );
867856
868- ecma_op_create_mutable_binding (local_env_p , import_names_p -> local_name_p , true /* is_deletable */ );
869- ecma_op_set_mutable_binding (local_env_p ,
870- import_names_p -> local_name_p ,
871- prop_value ,
872- false /* is_strict */ );
873-
874- ecma_free_value (prop_value );
875857 }
876858 }
877859
860+ ecma_property_t * prop_p = ecma_op_create_mutable_binding (local_env_p ,
861+ import_names_p -> local_name_p ,
862+ true /* is_deletable */ );
863+ JERRY_ASSERT (prop_p != ECMA_PROPERTY_POINTER_ERROR );
864+
865+ if (prop_p != NULL )
866+ {
867+ JERRY_ASSERT (ecma_is_value_undefined (ECMA_PROPERTY_VALUE_PTR (prop_p )-> value ));
868+ ECMA_PROPERTY_VALUE_PTR (prop_p )-> value = prop_value ;
869+ ecma_deref_if_object (prop_value );
870+ }
871+ else
872+ {
873+ ecma_op_set_mutable_binding (local_env_p ,
874+ import_names_p -> local_name_p ,
875+ prop_value ,
876+ false /* is_strict */ );
877+ ecma_free_value (prop_value );
878+ }
879+
878880 import_names_p = import_names_p -> next_p ;
879881 }
880882
0 commit comments