@@ -704,18 +704,20 @@ def store_string_to_utf8(cx, src, src_code_units, worst_case_size):
704704  assert (src_code_units  <=  MAX_STRING_BYTE_LENGTH )
705705  ptr  =  cx .opts .realloc (0 , 0 , 1 , src_code_units )
706706  trap_if (ptr  +  src_code_units  >  len (cx .opts .memory ))
707-   encoded  =  src .encode ('utf-8' )
708-   assert (src_code_units  <=  len (encoded ))
709-   cx .opts .memory [ptr  : ptr + src_code_units ] =  encoded [0  : src_code_units ]
710-   if  src_code_units  <  len (encoded ):
711-     trap_if (worst_case_size  >  MAX_STRING_BYTE_LENGTH )
712-     ptr  =  cx .opts .realloc (ptr , src_code_units , 1 , worst_case_size )
713-     trap_if (ptr  +  worst_case_size  >  len (cx .opts .memory ))
714-     cx .opts .memory [ptr + src_code_units  : ptr + len (encoded )] =  encoded [src_code_units  : ]
715-     if  worst_case_size  >  len (encoded ):
716-       ptr  =  cx .opts .realloc (ptr , worst_case_size , 1 , len (encoded ))
717-       trap_if (ptr  +  len (encoded ) >  len (cx .opts .memory ))
718-   return  (ptr , len (encoded ))
707+   for  i ,code_point  in  enumerate (src ):
708+     if  ord (code_point ) <  2 ** 7 :
709+       cx .opts .memory [ptr  +  i ] =  ord (code_point )
710+     else :
711+       trap_if (worst_case_size  >  MAX_STRING_BYTE_LENGTH )
712+       ptr  =  cx .opts .realloc (ptr , src_code_units , 1 , worst_case_size )
713+       trap_if (ptr  +  worst_case_size  >  len (cx .opts .memory ))
714+       encoded  =  src .encode ('utf-8' )
715+       cx .opts .memory [ptr + i  : ptr + len (encoded )] =  encoded [i  : ]
716+       if  worst_case_size  >  len (encoded ):
717+         ptr  =  cx .opts .realloc (ptr , worst_case_size , 1 , len (encoded ))
718+         trap_if (ptr  +  len (encoded ) >  len (cx .opts .memory ))
719+       return  (ptr , len (encoded ))
720+   return  (ptr , src_code_units )
719721
720722def  store_utf8_to_utf16 (cx , src , src_code_units ):
721723  worst_case_size  =  2  *  src_code_units 
0 commit comments