X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FMarshal%2FAlloc.hs;h=e5c3aa33742169dfb3c3af24e463855081939426;hb=f7a485978f04e84b086f1974b88887cc72d832d0;hp=6080d0cfb3df95c7dcf8cf87fe008900df5687a3;hpb=260e7f2ed9a43c6ecf5a556d77817f39ed2893ab;p=ghc-base.git diff --git a/Foreign/Marshal/Alloc.hs b/Foreign/Marshal/Alloc.hs index 6080d0c..e5c3aa3 100644 --- a/Foreign/Marshal/Alloc.hs +++ b/Foreign/Marshal/Alloc.hs @@ -1,21 +1,20 @@ {-# OPTIONS -fno-implicit-prelude #-} ----------------------------------------------------------------------------- --- +-- | -- Module : Foreign.Marshal.Alloc -- Copyright : (c) The FFI task force 2001 --- License : BSD-style (see the file libraries/core/LICENSE) +-- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : ffi@haskell.org -- Stability : provisional -- Portability : portable -- --- $Id: Alloc.hs,v 1.4 2001/12/21 15:07:22 simonmar Exp $ --- -- Marshalling support: basic routines for memory allocation -- ----------------------------------------------------------------------------- module Foreign.Marshal.Alloc ( + -- * Allocation malloc, -- :: Storable a => IO (Ptr a) mallocBytes, -- :: Int -> IO (Ptr a) @@ -45,7 +44,9 @@ import GHC.Base -- exported functions -- ------------------ --- allocate space for storable type +-- |Allocate space for storable type. The size of the area allocated +-- is determined by the 'sizeOf' method from the instance of +-- 'Storable' for the appropriate type. -- malloc :: Storable a => IO (Ptr a) malloc = doMalloc undefined @@ -53,16 +54,16 @@ malloc = doMalloc undefined doMalloc :: Storable a => a -> IO (Ptr a) doMalloc dummy = mallocBytes (sizeOf dummy) --- allocate given number of bytes of storage +-- |Allocate given number of bytes of storage, equivalent to C\'s @malloc()@. -- mallocBytes :: Int -> IO (Ptr a) mallocBytes size = failWhenNULL "malloc" (_malloc (fromIntegral size)) --- temporarily allocate space for a storable type +-- |Temporarily allocate space for a storable type. -- --- * the pointer passed as an argument to the function must *not* escape from --- this function; in other words, in `alloca f' the allocated storage must --- not be used after `f' returns +-- * the pointer passed as an argument to the function must /not/ escape from +-- this function; in other words, in @alloca f@ the allocated storage must +-- not be used after @f@ returns -- alloca :: Storable a => (Ptr a -> IO b) -> IO b alloca = doAlloca undefined @@ -70,11 +71,11 @@ alloca = doAlloca undefined doAlloca :: Storable a => a -> (Ptr a -> IO b) -> IO b doAlloca dummy = allocaBytes (sizeOf dummy) --- temporarily allocate the given number of bytes of storage +-- |Temporarily allocate the given number of bytes of storage. -- --- * the pointer passed as an argument to the function must *not* escape from --- this function; in other words, in `allocaBytes n f' the allocated storage --- must not be used after `f' returns +-- * the pointer passed as an argument to the function must /not/ escape from +-- this function; in other words, in @allocaBytes n f@ the allocated storage +-- must not be used after @f@ returns -- #ifdef __GLASGOW_HASKELL__ allocaBytes :: Int -> (Ptr a -> IO b) -> IO b @@ -92,13 +93,15 @@ allocaBytes :: Int -> (Ptr a -> IO b) -> IO b allocaBytes size = bracket (mallocBytes size) free #endif --- adjust a malloc'ed storage area to the given size +-- |Adjust a malloc\'ed storage area to the given size (equivalent to +-- C\'s @realloc()@). -- reallocBytes :: Ptr a -> Int -> IO (Ptr a) reallocBytes ptr size = failWhenNULL "realloc" (_realloc ptr (fromIntegral size)) --- free malloc'ed storage +-- |Free malloc\'ed storage (equivalent to +-- C\'s @free()@) -- free :: Ptr a -> IO () free = _free @@ -124,6 +127,6 @@ failWhenNULL name f = do -- basic C routines needed for memory allocation -- -foreign import "malloc" unsafe _malloc :: CSize -> IO (Ptr a) -foreign import "realloc" unsafe _realloc :: Ptr a -> CSize -> IO (Ptr a) -foreign import "free" unsafe _free :: Ptr a -> IO () +foreign import ccall unsafe "malloc" _malloc :: CSize -> IO (Ptr a) +foreign import ccall unsafe "realloc" _realloc :: Ptr a -> CSize -> IO (Ptr a) +foreign import ccall unsafe "free" _free :: Ptr a -> IO ()