gc: delegated mallocs in GarbageAlloc to hs-boehmgc (Mate.GC.Boehm.mallocBytes);
[mate.git] / Mate / GarbageAlloc.hs
index f5b109385d14139761a6debfb19b6f0824664ae1..d993f93e68f2af865c3ee841e51fb0cfe21fe363 100644 (file)
@@ -1,19 +1,47 @@
-module Mate.GarbageAlloc where
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE CPP #-}
+#include "debug.h"
+module Mate.GarbageAlloc(
+    mallocClassData,
+    mallocString,
+    mallocObject,
+    getHeapMemory)  where
 
 import Foreign
 import Foreign.C
 
+import Mate.GC.Boehm
+
+import Text.Printf
+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
+  mallocBytesGC size
 
 mallocString :: Int -> IO (Ptr a)
-mallocString = mallocBytes
+mallocString size = do
+  printfStr "mallocString: %d\n" size
+  mallocBytesGC size
 
-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
+
+-- 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 = getHeapSize
+