From c6bdf4fb0b06ac55a7bb200f0ef31ea9a7a830ec Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Fri, 18 Sep 2015 17:54:22 +0200 Subject: Remove references to () from types of mkWeak# and friends Previously the types needlessly used (), which is defined ghc-prim, leading to unfortunate import cycles. See #10867 for details. Updates stm submodule. --- libraries/base/GHC/ForeignPtr.hs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'libraries/base/GHC/ForeignPtr.hs') diff --git a/libraries/base/GHC/ForeignPtr.hs b/libraries/base/GHC/ForeignPtr.hs index 6e288483ea..0b9118ea07 100644 --- a/libraries/base/GHC/ForeignPtr.hs +++ b/libraries/base/GHC/ForeignPtr.hs @@ -291,16 +291,26 @@ addForeignPtrConcFinalizer_ (PlainForeignPtr r) finalizer = do if noFinalizers then IO $ \s -> case r of { IORef (STRef r#) -> - case mkWeak# r# () (foreignPtrFinalizer r) s of { (# s1, _ #) -> + case mkWeak# r# () finalizer' s of { (# s1, _ #) -> (# s1, () #) }} else return () + where + finalizer' :: State# RealWorld -> State# RealWorld + finalizer' s = + case unIO (foreignPtrFinalizer r) s of + (# s', () #) -> s' addForeignPtrConcFinalizer_ f@(MallocPtr fo r) finalizer = do noFinalizers <- insertHaskellFinalizer r finalizer if noFinalizers then IO $ \s -> - case mkWeak# fo () (do foreignPtrFinalizer r; touch f) s of + case mkWeak# fo () finalizer' s of (# s1, _ #) -> (# s1, () #) else return () + where + finalizer' :: State# RealWorld -> State# RealWorld + finalizer' s = + case unIO (foreignPtrFinalizer r >> touch f) s of + (# s', () #) -> s' addForeignPtrConcFinalizer_ _ _ = error "GHC.ForeignPtr: attempt to add a finalizer to plain pointer" @@ -359,7 +369,7 @@ foreignPtrFinalizer r = do case fs of NoFinalizers -> return () CFinalizers w -> IO $ \s -> case finalizeWeak# w s of - (# s1, 1#, f #) -> f s1 + (# s1, 1#, f #) -> case f s1 of s2 -> (# s2, () #) (# s1, _, _ #) -> (# s1, () #) HaskellFinalizers actions -> sequence_ actions -- cgit v1.2.1