nl_tokens: Sets a value in memory in a dynamic way at run - time . Uses the type data . This is the same as makeSetValue except that makeSetValue is done at compile - time and generates the needed code then whereas this function picks the right code at run - time . Note that setValue and getValue only do * aligned * writes and reads! Note that ccall uses JS types as for defining types while setValue and getValue need LLVM types ( i8 i32 ) - this is a lower - level operation
pl_tokens: function setValue ( ptr , value , type , noSafe ) { <mask> = type || 'i8' ; if ( type . charAt ( type . length - 1 ) === '*' ) type = 'i32' ; // pointers are 32-bit switch ( type ) { case 'i1' : HEAP8 [ ( ptr ) ] = value ; break ; case 'i8' : HEAP8 [ ( ptr ) ] = value ; break ; case 'i16' : HEAP16 [ ( ( ptr ) >> 1 ) ] = value ; break ; case 'i32' : HEAP32 [ ( ( ptr ) >> 2 ) ] = value ; break ; case 'i64' : ( tempI64 = [ value >>> 0 , Math . min ( Math . floor ( ( value ) / ( + ( 4294967296 ) ) ) , ( + ( 4294967295 ) ) ) >>> 0 ] , HEAP32 [ ( ( ptr ) >> 2 ) ] = tempI64 [ 0 ] , HEAP32 [ ( ( ( ptr ) + ( 4 ) ) >> 2 ) ] = tempI64 [ 1 ] ) ; break ; case 'float' : HEAPF32 [ ( ( ptr ) >> 2 ) ] = value ; break ; case 'double' : HEAPF64 [ ( ( ptr ) >> 3 ) ] = value ; break ; default : abort ( 'invalid type for setValue: ' + type ) ; } }