@@ -637,7 +637,7 @@ export namespace String {
637
637
export function byteLength ( str : string , nullTerminated : bool = false ) : i32 {
638
638
var strOff = changetype < usize > ( str ) ;
639
639
var strEnd = strOff + < usize > changetype < BLOCK > ( changetype < usize > ( str ) - BLOCK_OVERHEAD ) . rtSize ;
640
- var bufLen = nullTerminated ? 1 : 0 ;
640
+ var bufLen = i32 ( nullTerminated ) ;
641
641
while ( strOff < strEnd ) {
642
642
let c1 = < u32 > load < u16 > ( strOff ) ;
643
643
if ( c1 < 128 ) {
@@ -661,12 +661,13 @@ export namespace String {
661
661
export function encode ( str : string , nullTerminated : bool = false ) : ArrayBuffer {
662
662
var strOff = changetype < usize > ( str ) ;
663
663
var strEnd = changetype < usize > ( str ) + < usize > changetype < BLOCK > ( changetype < usize > ( str ) - BLOCK_OVERHEAD ) . rtSize ;
664
- var buf = __alloc ( UTF8 . byteLength ( str , nullTerminated ) , idof < ArrayBuffer > ( ) ) ;
664
+ var bufLen = < usize > UTF8 . byteLength ( str , nullTerminated ) ;
665
+ var buf = __alloc ( bufLen , idof < ArrayBuffer > ( ) ) ;
666
+ var bufEnd = buf + bufLen - usize ( nullTerminated ) ;
665
667
var bufOff = buf ;
666
- while ( strOff < strEnd ) {
668
+ while ( bufOff < bufEnd ) {
667
669
let c1 = < u32 > load < u16 > ( strOff ) ;
668
670
if ( c1 < 128 ) {
669
- if ( nullTerminated && ! c1 ) break ;
670
671
store < u8 > ( bufOff , c1 ) ;
671
672
bufOff += 1 ; strOff += 2 ;
672
673
} else if ( c1 < 2048 ) {
@@ -692,12 +693,9 @@ export namespace String {
692
693
strOff += 2 ; bufOff += 3 ;
693
694
}
694
695
}
696
+ assert ( strOff <= strEnd ) ;
695
697
if ( nullTerminated ) {
696
- assert ( strOff <= strEnd ) ;
697
- buf = __realloc ( buf , bufOff - buf + 1 ) ;
698
698
store < u8 > ( bufOff , 0 ) ;
699
- } else {
700
- assert ( strOff == strEnd ) ;
701
699
}
702
700
return changetype < ArrayBuffer > ( buf ) ; // retains
703
701
}
0 commit comments