Wall: remove some warnings
[mate.git] / Mate / GarbageAlloc.hs
index f5b109385d14139761a6debfb19b6f0824664ae1..aa2ed3f12c5377ae8943b6bcdaf4f54c4911818b 100644 (file)
@@ -1,19 +1,67 @@
-module Mate.GarbageAlloc where
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE CPP #-}
+#include "debug.h"
+module Mate.GarbageAlloc(
+    mallocClassData,
+    mallocStringGC,
+    mallocObjectGC,
+    getHeapMemory,
+    printMemoryUsage,
+    printGCStats,
+    mallocObjectUnmanaged,
+    mallocStringUnmanaged)  where
 
 import Foreign
 import Foreign.C
 
+import Mate.GC.Boehm
+
+#ifdef DBG_STR
+import Text.Printf
+#endif
+import Mate.Debug
+
 -- unified place for allocating Memory
 -- TODO: implement GC stuff ;-)
 
 mallocClassData :: Int -> IO (Ptr a)
-mallocClassData = mallocBytes
+mallocClassData size = do
+  printfStr "mallocClassData: %d\n" size
+  mem <- mallocBytes size
+  addRootGC mem (plusPtr mem size)
+  return mem
 
-mallocString :: Int -> IO (Ptr a)
-mallocString = mallocBytes
+mallocStringGC :: Int -> IO (Ptr a)
+mallocStringGC size = do
+  printfStr "mallocString: %d\n" size
+  mallocBytesGC size
 
-foreign export ccall mallocObject :: Int -> IO CUInt
-mallocObject :: Int -> IO CUInt
-mallocObject size = do
+foreign export ccall mallocObjectGC :: Int -> IO CPtrdiff
+mallocObjectGC :: Int -> IO CPtrdiff
+mallocObjectGC size = do
+  ptr <- mallocBytesGC size
+  printfStr "mallocObject: %d\n" size
+  return $ fromIntegral $ ptrToIntPtr ptr
+
+mallocObjectUnmanaged :: Int -> IO CPtrdiff
+mallocObjectUnmanaged size = do
   ptr <- mallocBytes size
+  printfStr "mallocObjectUnmanged: %d\n" size
   return $ fromIntegral $ ptrToIntPtr ptr
+
+mallocStringUnmanaged :: Int -> IO (Ptr a)
+mallocStringUnmanaged size = do
+  printfStr "mallocStringUnamaged: %d\n" size
+  mallocBytes size
+
+
+getHeapMemory :: IO Int
+getHeapMemory = getHeapSizeGC
+
+foreign export ccall printMemoryUsage :: IO ()
+printMemoryUsage :: IO ()
+printMemoryUsage = getHeapMemory >>= print
+
+foreign export ccall printGCStats :: IO ()
+printGCStats :: IO ()
+printGCStats = putStrLn "Should print GC Stats"