@@ -297,14 +297,17 @@ function getNativeTypeSize(type) {
297297
298298function  getHeapOffset ( offset ,  type )  { 
299299  const  sz  =  getNativeTypeSize ( type ) ; 
300-   const  shifts  =  Math . log ( sz )  /  Math . LN2 ; 
300+   if  ( sz  ==  1 )  { 
301+     return  offset ; 
302+   } 
301303  if  ( MEMORY64  ==  1 )  { 
302-     return  `((${ offset }  )/${ 2  **  shifts }  )` ; 
303-   }  else  if  ( CAN_ADDRESS_2GB )  { 
304+     return  `((${ offset }  )/${ sz }  )` ; 
305+   } 
306+   const  shifts  =  Math . log ( sz )  /  Math . LN2 ; 
307+   if  ( CAN_ADDRESS_2GB )  { 
304308    return  `((${ offset }  )>>>${ shifts }  )` ; 
305-   }  else  { 
306-     return  `((${ offset }  )>>${ shifts }  )` ; 
307309  } 
310+   return  `((${ offset }  )>>${ shifts }  )` ; 
308311} 
309312
310313function  ensureDot ( value )  { 
@@ -427,19 +430,24 @@ function makeSetValueImpl(ptr, pos, value, type) {
427430} 
428431
429432function  makeHEAPView ( which ,  start ,  end )  { 
430-   const  size  =  parseInt ( which . replace ( 'U' ,  '' ) . replace ( 'F' ,  '' ) )  /  8 ; 
431-   const  shift  =  Math . log2 ( size ) ; 
432-   let  mod  =  '' ; 
433-   if  ( size  !=  1 )  { 
434-     if  ( MEMORY64 )  { 
435-       mod  =  '/'  +  size ; 
436-     }  else  if  ( CAN_ADDRESS_2GB )  { 
437-       mod  =  '>>>'  +  shift ; 
438-     }  else  { 
439-       mod  =  '>>'  +  shift ; 
440-     } 
441-   } 
442-   return  `HEAP${ which }  .subarray((${ start }  )${ mod }  , (${ end }  )${ mod }  )` ; 
433+   // The makeHEAPView, for legacy reasons, takes a heap "suffix" 
434+   // rather than the heap "type" that used by other APIs here. 
435+   const  type  =  { 
436+     '8' : 'i8' , 
437+     'U8' : 'u8' , 
438+     '16' : 'i16' , 
439+     'U16' : 'u16' , 
440+     '32' : 'i32' , 
441+     'U32' : 'u32' , 
442+     '64' : 'i64' , 
443+     'U64' : 'u64' , 
444+     'F32' : 'float' , 
445+     'F64' : 'double' , 
446+   } [ which ] ; 
447+   const  heap  =  getHeapForType ( type ) ; 
448+   start  =  getHeapOffset ( start ,  type ) ; 
449+   end  =  getHeapOffset ( end ,  type ) ; 
450+   return  `${ heap }  .subarray((${ start }  ), ${ end }  )` ; 
443451} 
444452
445453// Given two values and an operation, returns the result of that operation. 
0 commit comments