codegen: approx. initial codebuffer size according to codesize @ bytecode
[mate.git] / Mate / Strings.hs
index 2ebda14e4861da078d754c6730999c6fc8e8e56e..05f6c50f8aeb7eee497f9d3d1177f6eb7319e819 100644 (file)
@@ -19,12 +19,13 @@ import Foreign
 import Foreign.C.Types
 
 import Mate.Types
+import Mate.NativeSizes
 import Mate.ClassPool
 import Mate.Debug
 import Mate.GarbageAlloc
 
 
-getUniqueStringAddr :: B.ByteString -> IO Word32
+getUniqueStringAddr :: B.ByteString -> IO NativeWord
 getUniqueStringAddr str = do
   smap <- getStringMap
   case M.lookup str smap of
@@ -34,7 +35,7 @@ getUniqueStringAddr str = do
       return addr
     Just addr -> return addr
 
-allocateJavaString :: B.ByteString -> IO Word32
+allocateJavaString :: B.ByteString -> IO NativeWord
 allocateJavaString str = do
   {- we have to build a java object layout here, where String object looks like
    -
@@ -57,12 +58,12 @@ allocateJavaString str = do
   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 CUInt
+  let ptr = intPtrToPtr (fromIntegral tblptr) :: Ptr CPtrdiff
   mtbl <- getMethodTable "java/lang/String"
   poke ptr $ fromIntegral mtbl
 
   -- build array layout
-  let strlen = (fromIntegral $ B.length str)
+  let strlen = fromIntegral $ B.length str
   -- (+1) for \0, (+4) for length
   newstr <- mallocString (strlen + 5)
   BI.memset newstr 0 (fromIntegral $ strlen + 5)
@@ -70,16 +71,16 @@ allocateJavaString str = do
   copyBytes (plusPtr newstr 4) arr strlen
   printfStr "new str ptr: (%s)@%d\n" (toString str) strlen
 
-  let newstr_length = castPtr newstr :: Ptr CUInt
+  let newstr_length = castPtr newstr :: Ptr CPtrdiff
   poke newstr_length $ fromIntegral strlen
 
   -- set value pointer
-  poke (plusPtr ptr 4) (fromIntegral (ptrToIntPtr newstr) :: CUInt)
+  poke (plusPtr ptr 4) (fromIntegral (ptrToIntPtr newstr) :: CPtrdiff)
   -- set count field
-  poke (plusPtr ptr 8) (fromIntegral strlen :: CUInt)
+  poke (plusPtr ptr 8) (fromIntegral strlen :: CPtrdiff)
   -- set hash code (TODO)
-  poke (plusPtr ptr 12) (0 :: CUInt)
+  poke (plusPtr ptr 12) (0 :: CPtrdiff)
   -- set offset
-  poke (plusPtr ptr 16) (0 :: CUInt)
+  poke (plusPtr ptr 16) (0 :: CPtrdiff)
 
   return $ fromIntegral tblptr