@@ -704,18 +704,20 @@ def store_string_to_utf8(cx, src, src_code_units, worst_case_size):
704
704
assert (src_code_units <= MAX_STRING_BYTE_LENGTH )
705
705
ptr = cx .opts .realloc (0 , 0 , 1 , src_code_units )
706
706
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 )
719
721
720
722
def store_utf8_to_utf16 (cx , src , src_code_units ):
721
723
worst_case_size = 2 * src_code_units
0 commit comments