packages feed

primitive-atomic 0.1.0.0 → 0.1.0.1

raw patch · 3 files changed

+12/−7 lines, 3 filesdep +primitive-unlifteddep ~primitivePVP ok

version bump matches the API change (PVP)

Dependencies added: primitive-unlifted

Dependency ranges changed: primitive

API changes (from Hackage documentation)

Files

primitive-atomic.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.2 name: primitive-atomic-version: 0.1.0.0+version: 0.1.0.1 synopsis: Wrappers for primops around atomic operations homepage: https://github.com/andrewthad/primitive-atomic license: BSD-3-Clause@@ -21,7 +21,8 @@     Data.Primitive.PrimArray.Atomic   build-depends:     , base >=4.11.1 && <5-    , primitive >= 0.6.4+    , primitive >= 0.7 && <0.8+    , primitive-unlifted >= 0.1 && <0.2   hs-source-dirs: src   default-language: Haskell2010   ghc-options: -Wall@@ -34,5 +35,6 @@     , base     , primitive-atomic     , primitive+    , primitive-unlifted   ghc-options: -Wall -O2   default-language: Haskell2010
src/Data/Primitive/Unlifted/Atomic.hs view
@@ -8,8 +8,8 @@   ) where  import Control.Monad.Primitive (PrimMonad,PrimState,primitive)-import Data.Primitive (MutableUnliftedArray(..),PrimUnlifted)-import Data.Primitive (toArrayArray#,fromArrayArray#)+import Data.Primitive.Unlifted.Array (MutableUnliftedArray(..))+import Data.Primitive.Unlifted.Class (PrimUnlifted,Unlifted,toUnlifted#,fromUnlifted#) import GHC.Exts (Any,MutableArrayArray#,MutableArray#,ArrayArray#,Int(I#)) import GHC.Exts (casArray#,isTrue#,(==#),unsafeCoerce#) @@ -32,9 +32,11 @@ casUnliftedArray (MutableUnliftedArray arr#) (I# i#) old new =   -- All of this unsafeCoercing is really nasty business. This will go away   -- once https://github.com/ghc-proposals/ghc-proposals/pull/203 happens.+  -- Also, this is unsound if the result is immidiately consumed by+  -- the FFI.   primitive $ \s0 ->-    let !uold = (unsafeCoerce# :: ArrayArray# -> Any) (toArrayArray# old)-        !unew = (unsafeCoerce# :: ArrayArray# -> Any) (toArrayArray# new)+    let !uold = (unsafeCoerce# :: Unlifted a -> Any) (toUnlifted# old)+        !unew = (unsafeCoerce# :: Unlifted a -> Any) (toUnlifted# new)      in case casArray# ((unsafeCoerce# :: MutableArrayArray# (PrimState m) -> MutableArray# (PrimState m) Any) arr#) i# uold unew s0 of-          (# s1, n, ur #) -> (# s1, (isTrue# (n ==# 0# ),fromArrayArray# ((unsafeCoerce# :: Any -> ArrayArray#) ur)) #)+          (# s1, n, ur #) -> (# s1, (isTrue# (n ==# 0# ),fromUnlifted# ((unsafeCoerce# :: Any -> Unlifted a) ur)) #) 
test/Unit.hs view
@@ -1,6 +1,7 @@ {-# language MultiWayIf #-}  import Data.Primitive.Unlifted.Atomic+import Data.Primitive.Unlifted.Array import Data.Primitive import Control.Monad (when)