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 = (
5151// Note: 
5252// `decodeValues` assumes that the size of RawJSValue is 16. 
5353export  const  decodeArray  =  ( ptr : pointer ,  length : number ,  memory : Memory )  =>  { 
54+     // fast path for empty array 
55+     if  ( length  ===  0 )  {  return  [ ] ;  } 
56+ 
5457    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 ( ) ; 
5561    for  ( let  index  =  0 ;  index  <  length ;  index ++ )  { 
5662        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 ) ; 
6066        result . push ( decode ( kind ,  payload1 ,  payload2 ,  memory ) ) ; 
6167    } 
6268    return  result ; 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments