GC: first working version of boehm gc. working with: 8af66bf9d36f75558ec49e0461099d5f...
[mate.git] / Mate / GarbageAlloc.hs
index 1a272fbaedbbd02265d47a3a72785ab5b755cd8e..5dccda0f806332ec2e6cd7ba401d46865ea9b32d 100644 (file)
@@ -1,14 +1,21 @@
 {-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE CPP #-}
 #include "debug.h"
-module Mate.GarbageAlloc where
+module Mate.GarbageAlloc(
+    mallocClassData,
+    mallocString,
+    mallocObject,
+    getHeapMemory,
+    printMemoryUsage,
+    mallocStringVM,
+    mallocObjectVM)  where
 
 import Foreign
 import Foreign.C
 
-#ifdef DEBUG
+import Mate.GC.Boehm
+
 import Text.Printf
-#endif
 import Mate.Debug
 
 -- unified place for allocating Memory
@@ -17,16 +24,42 @@ import Mate.Debug
 mallocClassData :: Int -> IO (Ptr a)
 mallocClassData size = do
   printfStr "mallocClassData: %d\n" size
-  mallocBytes size
+  mem <- mallocBytes size
+  addRootGC mem (plusPtr mem size)
+  return mem
 
 mallocString :: Int -> IO (Ptr a)
 mallocString size = do
   printfStr "mallocString: %d\n" size
-  mallocBytes size
+  mallocBytesGC size
+
+mallocStringVM :: Int -> IO (Ptr a)
+mallocStringVM = mallocBytes
 
-foreign export ccall mallocObject :: Int -> IO CUInt
-mallocObject :: Int -> IO CUInt
+foreign export ccall mallocObject :: Int -> IO CPtrdiff
+mallocObject :: Int -> IO CPtrdiff
 mallocObject size = do
-  ptr <- mallocBytes size
+  ptr <- mallocBytesGC size
   printfStr "mallocObject: %d\n" size
   return $ fromIntegral $ ptrToIntPtr ptr
+
+mallocObjectVM :: Int -> IO CPtrdiff
+mallocObjectVM size = do
+  ptr <- mallocBytes size
+  printfStr "mallocObject VM: %d\n" size
+  return $ fromIntegral $ ptrToIntPtr ptr
+
+-- TODO: delete me
+foreign export ccall demoInterfaceCall :: CUInt -> IO ()
+demoInterfaceCall :: CUInt -> IO ()
+demoInterfaceCall val = do
+  printf "demoInterfaceCall: 0x%08x\n" (fromIntegral val :: Word32)
+  return ()
+
+getHeapMemory :: IO Int
+getHeapMemory = getHeapSizeGC
+
+
+foreign export ccall printMemoryUsage :: IO ()
+printMemoryUsage :: IO ()
+printMemoryUsage = getHeapMemory >>= print