#ifndef __NHC__
-newForeignPtr :: Ptr a -> FinalizerPtr a -> IO (ForeignPtr a)
+newForeignPtr :: FinalizerPtr a -> Ptr a -> IO (ForeignPtr a)
-- ^Turns a plain memory reference into a foreign pointer, and
-- associates a finaliser with the reference. The finaliser will be executed
-- after the last reference to the foreign object is dropped. Note that there
-- reference was dropped; this depends on the details of the Haskell storage
-- manager. The only guarantee is that the finaliser runs before the program
-- terminates.
-newForeignPtr p finalizer
+newForeignPtr finalizer p
= do fObj <- newForeignPtr_ p
- addForeignPtrFinalizer fObj finalizer
+ addForeignPtrFinalizer finalizer fObj
return fObj
withForeignPtr :: ForeignPtr a -> (Ptr a -> IO b) -> IO b
mallocForeignPtr :: Storable a => IO (ForeignPtr a)
mallocForeignPtr = do
r <- malloc
- newForeignPtr r finalizerFree
+ newForeignPtr finalizerFree r
mallocForeignPtrBytes :: Int -> IO (ForeignPtr a)
mallocForeignPtrBytes n = do
r <- mallocBytes n
- newForeignPtr r finalizerFree
+ newForeignPtr finalizerFree r
#endif /* __HUGS__ || __NHC__ */
mallocForeignPtrArray :: Storable a => Int -> IO (ForeignPtr a)
(# s, MallocPtr mbarr# r #)
}
-addForeignPtrFinalizer :: ForeignPtr a -> FinalizerPtr a -> IO ()
+addForeignPtrFinalizer :: FinalizerPtr a -> ForeignPtr a -> IO ()
-- ^This function adds a finaliser to the given foreign object. The
-- finalizer will run /before/ all other finalizers for the same
-- object which have already been registered.
-addForeignPtrFinalizer fptr finalizer =
+addForeignPtrFinalizer finalizer fptr =
addForeignPtrConcFinalizer fptr
(mkFinalizer finalizer (unsafeForeignPtrToPtr fptr))
withForeignPtr regex_fptr $ \p ->
c_regcomp p cstr (fromIntegral flags)
if (r == 0)
- then do addForeignPtrFinalizer regex_fptr ptr_regfree
+ then do addForeignPtrFinalizer ptr_regfree regex_fptr
return (Regex regex_fptr)
else error "Text.Regex.Posix.regcomp: error in pattern" -- ToDo