File tree Expand file tree Collapse file tree 1 file changed +9
-3
lines changed Expand file tree Collapse file tree 1 file changed +9
-3
lines changed Original file line number Diff line number Diff line change @@ -51,12 +51,18 @@ export const decode = (
51
51
// Note:
52
52
// `decodeValues` assumes that the size of RawJSValue is 16.
53
53
export const decodeArray = ( ptr : pointer , length : number , memory : Memory ) => {
54
+ // fast path for empty array
55
+ if ( length === 0 ) { return [ ] ; }
56
+
54
57
let result = [ ] ;
58
+ // It's safe to hold DataView here because WebAssembly.Memory.buffer won't
59
+ // change within this function.
60
+ const view = memory . dataView ( ) ;
55
61
for ( let index = 0 ; index < length ; index ++ ) {
56
62
const base = ptr + 16 * index ;
57
- const kind = memory . readUint32 ( base ) ;
58
- const payload1 = memory . readUint32 ( base + 4 ) ;
59
- const payload2 = memory . readFloat64 ( base + 8 ) ;
63
+ const kind = view . getUint32 ( base , true ) ;
64
+ const payload1 = view . getUint32 ( base + 4 , true ) ;
65
+ const payload2 = view . getFloat64 ( base + 8 , true ) ;
60
66
result . push ( decode ( kind , payload1 , payload2 , memory ) ) ;
61
67
}
62
68
return result ;
You can’t perform that action at this time.
0 commit comments