@@ -2311,25 +2311,21 @@ function stringLengthUTF8(str: string): usize {
2311
2311
u = 0x10000 + ( ( u & 0x3FF ) << 10 ) | ( str . charCodeAt ( ++ i ) & 0x3FF ) ;
2312
2312
}
2313
2313
if ( u <= 0x7F ) {
2314
- ++ len ;
2314
+ len += 1 ;
2315
2315
} else if ( u <= 0x7FF ) {
2316
2316
len += 2 ;
2317
2317
} else if ( u <= 0xFFFF ) {
2318
2318
len += 3 ;
2319
2319
} else if ( u <= 0x1FFFFF ) {
2320
2320
len += 4 ;
2321
- } else if ( u <= 0x3FFFFFF ) {
2322
- len += 5 ;
2323
- } else {
2324
- len += 6 ;
2325
2321
}
2326
2322
}
2327
2323
return len ;
2328
2324
}
2329
2325
2330
2326
function allocString ( str : string | null ) : usize {
2331
2327
if ( str === null ) return 0 ;
2332
- var ptr = binaryen . _malloc ( stringLengthUTF8 ( str ) + 1 ) ;
2328
+ var ptr = binaryen . _malloc ( stringLengthUTF8 ( str ) + 1 ) >>> 0 ;
2333
2329
// the following is based on Emscripten's stringToUTF8Array
2334
2330
var idx = ptr ;
2335
2331
for ( let i = 0 , k = str . length ; i < k ; ++ i ) {
@@ -2346,21 +2342,9 @@ function allocString(str: string | null): usize {
2346
2342
binaryen . __i32_store8 ( idx ++ , ( 0xE0 | ( u >>> 12 ) ) as u8 ) ;
2347
2343
binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 6 ) & 63 ) ) as u8 ) ;
2348
2344
binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( u & 63 ) ) as u8 ) ;
2349
- } else if ( u <= 0x1FFFFF ) {
2350
- binaryen . __i32_store8 ( idx ++ , ( 0xF0 | ( u >>> 18 ) ) as u8 ) ;
2351
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 12 ) & 63 ) ) as u8 ) ;
2352
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 6 ) & 63 ) ) as u8 ) ;
2353
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( u & 63 ) ) as u8 ) ;
2354
- } else if ( u <= 0x3FFFFFF ) {
2355
- binaryen . __i32_store8 ( idx ++ , ( 0xF8 | ( u >>> 24 ) ) as u8 ) ;
2356
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 18 ) & 63 ) ) as u8 ) ;
2357
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 12 ) & 63 ) ) as u8 ) ;
2358
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 6 ) & 63 ) ) as u8 ) ;
2359
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( u & 63 ) ) as u8 ) ;
2360
2345
} else {
2361
- binaryen . __i32_store8 ( idx ++ , ( 0xFC | ( u >>> 30 ) ) as u8 ) ;
2362
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 24 ) & 63 ) ) as u8 ) ;
2363
- binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 18 ) & 63 ) ) as u8 ) ;
2346
+ assert ( u < 0x200000 , "Invalid Unicode code point during allocString" ) ;
2347
+ binaryen . __i32_store8 ( idx ++ , ( 0xF0 | ( u >>> 18 ) ) as u8 ) ;
2364
2348
binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 12 ) & 63 ) ) as u8 ) ;
2365
2349
binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( ( u >>> 6 ) & 63 ) ) as u8 ) ;
2366
2350
binaryen . __i32_store8 ( idx ++ , ( 0x80 | ( u & 63 ) ) as u8 ) ;
@@ -2370,9 +2354,9 @@ function allocString(str: string | null): usize {
2370
2354
return ptr ;
2371
2355
}
2372
2356
2373
- function readBuffer ( ptr : usize , length : i32 ) : Uint8Array {
2374
- var ret = new Uint8Array ( length ) ;
2375
- for ( let i = 0 ; i < length ; ++ i ) {
2357
+ function readBuffer ( ptr : usize , len : i32 ) : Uint8Array {
2358
+ var ret = new Uint8Array ( len ) ;
2359
+ for ( let i = 0 ; i < len ; ++ i ) {
2376
2360
ret [ i ] = binaryen . __i32_load8_u ( ptr + < usize > i ) ;
2377
2361
}
2378
2362
return ret ;
@@ -2383,7 +2367,7 @@ export function readString(ptr: usize): string | null {
2383
2367
var arr = new Array < i32 > ( ) ;
2384
2368
// the following is based on Emscripten's UTF8ArrayToString
2385
2369
var cp : u32 ;
2386
- var u1 : u32 , u2 : u32 , u3 : u32 , u4 : u32 , u5 : u32 ;
2370
+ var u1 : u32 , u2 : u32 , u3 : u32 ;
2387
2371
while ( cp = binaryen . __i32_load8_u ( ptr ++ ) ) {
2388
2372
if ( ! ( cp & 0x80 ) ) {
2389
2373
arr . push ( cp ) ;
@@ -2402,26 +2386,18 @@ export function readString(ptr: usize): string | null {
2402
2386
if ( ( cp & 0xF8 ) == 0xF0 ) {
2403
2387
cp = ( ( cp & 7 ) << 18 ) | ( u1 << 12 ) | ( u2 << 6 ) | u3 ;
2404
2388
} else {
2405
- u4 = binaryen . __i32_load8_u ( ptr ++ ) & 63 ;
2406
- if ( ( cp & 0xFC ) == 0xF8 ) {
2407
- cp = ( ( cp & 3 ) << 24 ) | ( u1 << 18 ) | ( u2 << 12 ) | ( u3 << 6 ) | u4 ;
2408
- } else {
2409
- u5 = binaryen . __i32_load8_u ( ptr ++ ) & 63 ;
2410
- cp = ( ( cp & 1 ) << 30 ) | ( u1 << 24 ) | ( u2 << 18 ) | ( u3 << 12 ) | ( u4 << 6 ) | u5 ;
2411
- }
2389
+ assert ( false , "Invalid UTF8 sequence during readString" ) ;
2412
2390
}
2413
2391
}
2414
- arr . push ( cp ) ;
2415
2392
if ( cp < 0x10000 ) {
2416
2393
arr . push ( cp ) ;
2417
2394
} else {
2418
2395
let ch = cp - 0x10000 ;
2419
- arr . push ( 0xD800 | ( ch >> 10 ) ) ;
2396
+ arr . push ( 0xD800 | ( ch >>> 10 ) ) ;
2420
2397
arr . push ( 0xDC00 | ( ch & 0x3FF ) ) ;
2421
2398
}
2422
2399
}
2423
2400
return String . fromCharCodes ( arr ) ;
2424
- // return String.fromCodePoints(arr);
2425
2401
}
2426
2402
2427
2403
/** Result structure of {@link Module#toBinary}. */
0 commit comments