git.iko.soy/distributed-process
on master help sign in
Adapt to mkWeak# changes in GHC 8.0
b53d524Ben Gamari
src/Control/Distributed/Process/Internal/CQueue.hs+6−1
@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
1{-# LANGUAGE DeriveFunctor #-}
2{-# LANGUAGE DeriveFunctor #-}
2{-# LANGUAGE BangPatterns #-}
3{-# LANGUAGE BangPatterns #-}
3{-# LANGUAGE MagicHash, UnboxedTuples, PatternGuards, ScopedTypeVariables, RankNTypes #-}
4{-# LANGUAGE MagicHash, UnboxedTuples, PatternGuards, ScopedTypeVariables, RankNTypes #-}
@@ -46,7 +47,7 @@ import Control.Distributed.Process.Internal.StrictList
46import Data.Maybe (fromJust)
47import Data.Maybe (fromJust)
47import Data.Traversable (traverse)
48import Data.Traversable (traverse)
48import GHC.MVar (MVar(MVar))
49import GHC.MVar (MVar(MVar))
49−import GHC.IO (IO(IO))
50+import GHC.IO (IO(IO), unIO)
50import GHC.Prim (mkWeak#)
51import GHC.Prim (mkWeak#)
51import GHC.Weak (Weak(Weak))
52import GHC.Weak (Weak(Weak))
52
53
@@ -265,7 +266,11 @@ dequeue (CQueue arrived incoming size) blockSpec matchons = mask_ $ decrementJus
265-- | Weak reference to a CQueue
266-- | Weak reference to a CQueue
266mkWeakCQueue :: CQueue a -> IO () -> IO (Weak (CQueue a))
267mkWeakCQueue :: CQueue a -> IO () -> IO (Weak (CQueue a))
267mkWeakCQueue m@(CQueue (StrictMVar (MVar m#)) _ _) f = IO $ \s ->
268mkWeakCQueue m@(CQueue (StrictMVar (MVar m#)) _ _) f = IO $ \s ->
269+#if MIN_VERSION_ghc_prim(0,5,0)
270+ case mkWeak# m# m (unIO f) s of (# s1, w #) -> (# s1, Weak w #)
271+#else
268 case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
272 case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
273+#endif
269
274
270queueSize :: CQueue a -> IO Int
275queueSize :: CQueue a -> IO Int
271queueSize (CQueue _ _ size) = readTVarIO size
276queueSize (CQueue _ _ size) = readTVarIO size
src/Control/Distributed/Process/Internal/StrictMVar.hs+7−3
@@ -36,7 +36,7 @@ import qualified Control.Concurrent.MVar as MVar
36#endif
36#endif
37 )
37 )
38import GHC.MVar (MVar(MVar))
38import GHC.MVar (MVar(MVar))
39−import GHC.IO (IO(IO))
39+import GHC.IO (IO(IO), unIO)
40import GHC.Prim (mkWeak#)
40import GHC.Prim (mkWeak#)
41import GHC.Weak (Weak(Weak))
41import GHC.Weak (Weak(Weak))
42
42
@@ -85,5 +85,9 @@ modifyMVarMasked (StrictMVar v) f =
85 evaluateFst (x, y) = evaluate x >> return (x, y)
85 evaluateFst (x, y) = evaluate x >> return (x, y)
86
86
87mkWeakMVar :: StrictMVar a -> IO () -> IO (Weak (StrictMVar a))
87mkWeakMVar :: StrictMVar a -> IO () -> IO (Weak (StrictMVar a))
88−mkWeakMVar m@(StrictMVar (MVar m#)) f = IO $ \s ->
88+mkWeakMVar q@(StrictMVar (MVar m#)) f = IO $ \s ->
89+#if MIN_VERSION_ghc_prim(0,5,0)
90+ case mkWeak# m# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
91+#else
89− case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
92+ case mkWeak# m# q f s of (# s', w #) -> (# s', Weak w #)
93+#endif
src/Control/Distributed/Process/Internal/WeakTQueue.hs+6−1
@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
1{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE MagicHash, UnboxedTuples #-}
3{-# LANGUAGE MagicHash, UnboxedTuples #-}
3-- | Clone of Control.Concurrent.STM.TQueue with support for mkWeakTQueue
4-- | Clone of Control.Concurrent.STM.TQueue with support for mkWeakTQueue
@@ -22,7 +23,7 @@ module Control.Distributed.Process.Internal.WeakTQueue (
22import Prelude hiding (read)
23import Prelude hiding (read)
23import GHC.Conc
24import GHC.Conc
24import Data.Typeable (Typeable)
25import Data.Typeable (Typeable)
25−import GHC.IO (IO(IO))
26+import GHC.IO (IO(IO), unIO)
26import GHC.Prim (mkWeak#)
27import GHC.Prim (mkWeak#)
27import GHC.Weak (Weak(Weak))
28import GHC.Weak (Weak(Weak))
28
29
@@ -99,4 +100,8 @@ isEmptyTQueue (TQueue read write) = do
99
100
100mkWeakTQueue :: TQueue a -> IO () -> IO (Weak (TQueue a))
101mkWeakTQueue :: TQueue a -> IO () -> IO (Weak (TQueue a))
101mkWeakTQueue q@(TQueue _read (TVar write#)) f = IO $ \s ->
102mkWeakTQueue q@(TQueue _read (TVar write#)) f = IO $ \s ->
103+#if MIN_VERSION_ghc_prim(0,5,0)
104+ case mkWeak# write# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
105+#else
102 case mkWeak# write# q f s of (# s', w #) -> (# s', Weak w #)
106 case mkWeak# write# q f s of (# s', w #) -> (# s', Weak w #)
107+#endif