+ {- we have to build a java object layout here, where String object looks like
+ -
+ - this -+
+ - |
+ - v
+ - +-------------+---------+-------+-------+----------------+--------+
+ - | MethodTable | GC Data | value | count | cachedhashcode | offset |
+ - +-------------+---------+-------+-------+----------------+--------+
+ - | |
+ - | +--+
+ - v v
+ - java/lang/String +--------+--------+--------+-----+------------------+
+ - | length | str[0] | str[1] | ... | str [length - 1] |
+ - +--------+--------+--------+-----+------------------+
+ - all cells are 32bit wide, except str[i] of course (they're 8bit [but
+ - should be 16bit, TODO]).
+ -}
+ -- build object layout
+ fsize <- getObjectSize "java/lang/String"
+ printfStr $ printf "string: fsize: %d (should be 4 * 6)\n" fsize
+ tblptr <- mallocObjectUnmanaged $ fromIntegral fsize
+ let ptr = intPtrToPtr (fromIntegral tblptr) :: Ptr CPtrdiff
+ mtbl <- getMethodTable "java/lang/String"
+ poke ptr $ fromIntegral mtbl
+
+ -- build array layout