lazy classloading: yet another bug
[mate.git] / Mate / Strings.hs
index f41f02265c91d31b4d4bb48e40001126248936ed..bb2bc8907f71139a9cfd2c712c70e93a7a03dd3a 100644 (file)
@@ -1,6 +1,4 @@
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE OverloadedStrings #-}
-#include "debug.h"
 module Mate.Strings (
   getUniqueStringAddr
   ) where
@@ -9,9 +7,6 @@ import Data.Word
 import qualified Data.Map as M
 import qualified Data.ByteString.Lazy as B
 import qualified Data.ByteString.Internal as BI
-#ifdef DEBUG
-import Text.Printf
-#endif
 
 import JVM.ClassFile
 
@@ -19,12 +14,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 +30,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
    -
@@ -55,8 +51,8 @@ allocateJavaString str = do
    -}
   -- build object layout
   fsize <- getObjectSize "java/lang/String"
-  printfStr "string: fsize: %d (should be 4 * 5)\n" fsize
-  tblptr <- mallocObject $ fromIntegral fsize
+  printfStr $ printf "string: fsize: %d (should be 4 * 5)\n" fsize
+  tblptr <- mallocObjectUnmanaged $ fromIntegral fsize
   let ptr = intPtrToPtr (fromIntegral tblptr) :: Ptr CPtrdiff
   mtbl <- getMethodTable "java/lang/String"
   poke ptr $ fromIntegral mtbl
@@ -64,11 +60,11 @@ allocateJavaString str = do
   -- build array layout
   let strlen = fromIntegral $ B.length str
   -- (+1) for \0, (+4) for length
-  newstr <- mallocString (strlen + 5)
+  newstr <- mallocStringUnmanaged (strlen + 5) --[TODO hs,bernhard: should be managed right?]
   BI.memset newstr 0 (fromIntegral $ strlen + 5)
   arr <- newArray ((map fromIntegral $ B.unpack str) :: [Word8])
   copyBytes (plusPtr newstr 4) arr strlen
-  printfStr "new str ptr: (%s)@%d\n" (toString str) strlen
+  printfStr $ printf "new str ptr: (%s)@%d\n" (toString str) strlen
 
   let newstr_length = castPtr newstr :: Ptr CPtrdiff
   poke newstr_length $ fromIntegral strlen