33// TODO: Use TypeScript built-in type
44declare const WebAssembly : any ;
55
6- export const WASM_DEBUG = process . env . WASM_DEBUG === "true" ;
6+ const NO_WASM = process . env . NO_WASM === "true" || process . env . MSGPACK_NO_WASM === "true" ;
7+ export const WASM_DEBUG = process . env . WASM_DEBUG === "true" || process . env . MSGPACK_WASM_DEBUG === "true" ;
78
89let { wasmModule } = ( ( ) => {
10+ if ( NO_WASM ) {
11+ return { } ;
12+ }
13+
914 try {
1015 if ( WASM_DEBUG ) {
1116 return require ( "../dist/wasm/untouched.wasm.js" ) ;
@@ -20,7 +25,10 @@ let { wasmModule } = (() => {
2025 }
2126} ) ( ) ;
2227
28+ export const WASM_AVAILABLE = ! ! wasmModule ;
29+
2330function abort ( filename : number , line : number , column : number ) : void {
31+ // FIXME: filename is just a number (pointer?)
2432 throw new Error ( `abort called at ${ filename } :${ line } :${ column } ` ) ;
2533}
2634
@@ -32,15 +40,28 @@ const defaultWasmInstance =
3240 } ,
3341 } ) ;
3442
35- export const WASM_AVAILABLE = ! ! wasmModule && process . env . NO_WASM !== "true" ;
36-
3743type pointer = number ;
3844
39- function setMemory ( wasm : any , destPtr : pointer , src : Uint8Array , size : number ) {
45+ function setMemoryU8 ( wasm : any , destPtr : pointer , src : Uint8Array , size : number ) {
4046 const destView = new Uint8Array ( wasm . exports . memory . buffer , destPtr , size ) ;
4147 destView . set ( src ) ;
4248}
49+ function setMemoryU16 ( wasm : any , destPtr : pointer , src : Uint16Array , size : number ) {
50+ const destView = new Uint16Array ( wasm . exports . memory . buffer , destPtr , size ) ;
51+ destView . set ( src ) ;
52+ }
53+
54+ export function utf8CountWasm ( units : Uint16Array , wasm = defaultWasmInstance ) : number {
55+ const inputPtr : pointer = wasm . exports . malloc ( units . byteLength ) ;
56+ try {
57+ setMemoryU16 ( wasm , inputPtr , units , units . length ) ;
58+ return wasm . exports . utf8CountUint16Array ( inputPtr , units . length ) ;
59+ } finally {
60+ wasm . exports . free ( inputPtr ) ;
61+ }
62+ }
4363
64+ // A wrapper function for utf8DecodeToUint16Array()
4465export function utf8DecodeWasm (
4566 bytes : Uint8Array ,
4667 offset : number ,
@@ -51,7 +72,7 @@ export function utf8DecodeWasm(
5172 // in worst case, the UTF-16 array uses the same as byteLength * 2
5273 const outputPtr : pointer = wasm . exports . malloc ( byteLength * 2 ) ;
5374 try {
54- setMemory ( wasm , inputPtr , bytes . subarray ( offset , offset + byteLength ) , byteLength ) ;
75+ setMemoryU8 ( wasm , inputPtr , bytes . subarray ( offset , offset + byteLength ) , byteLength ) ;
5576
5677 const outputArraySize = wasm . exports . utf8DecodeToUint16Array ( outputPtr , inputPtr , byteLength ) ;
5778 const codepoints = new Uint16Array ( wasm . exports . memory . buffer , outputPtr , outputArraySize ) ;
0 commit comments