+ {- we have to build a java object layout here, where String object looks like
+ -
+ - this -+
+ - |
+ - v
+ - +-------------+-------+-------+----------------+--------+
+ - | MethodTable | 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 "string: fsize: %d (should be 4 * 5)\n" fsize
+ tblptr <- mallocObject $ fromIntegral fsize
+ let ptr = intPtrToPtr (fromIntegral tblptr) :: Ptr CPtrdiff
+ mtbl <- getMethodTable "java/lang/String"
+ poke ptr $ fromIntegral mtbl
+
+ -- build array layout