X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Futils%2FPrimPacked.lhs;h=153ff5d3034e723e0da8208a15f3290339f04201;hb=438596897ebbe25a07e1c82085cfbc5bdb00f09e;hp=455bf9fd295619d58f6442eee501e3ad4f2892fd;hpb=4540b6559648acfdfb2b1acdedb45357c922f019;p=ghc-hetmet.git diff --git a/ghc/compiler/utils/PrimPacked.lhs b/ghc/compiler/utils/PrimPacked.lhs index 455bf9f..153ff5d 100644 --- a/ghc/compiler/utils/PrimPacked.lhs +++ b/ghc/compiler/utils/PrimPacked.lhs @@ -1,5 +1,5 @@ % -% (c) The GRASP/AQUA Project, Glasgow University, 1997 +% (c) The GRASP/AQUA Project, Glasgow University, 1997-1998 % \section{Basic ops on packed representations} @@ -32,12 +32,25 @@ module PrimPacked import GlaExts import Addr ( Addr(..) ) -import GHC -import ArrBase import ST +import Foreign +-- ForeignObj is now exported abstractly. +#if __GLASGOW_HASKELL__ >= 303 +import PrelForeign ( ForeignObj(..) ) +#endif + +#if __GLASGOW_HASKELL__ < 301 +import ArrBase ( StateAndMutableByteArray#(..), + StateAndByteArray#(..) ) import STBase -import IOBase ( ForeignObj(..) ) -import PackBase ( unpackCStringBA, packString ) +#elif __GLASGOW_HASKELL__ < 400 +import PrelArr ( StateAndMutableByteArray#(..), + StateAndByteArray#(..) ) +import PrelST +#else +import PrelST +#endif + \end{code} Return the length of a @\\NUL@ terminated character string: @@ -165,19 +178,33 @@ write_ps_array :: MutableByteArray s Int -> Int# -> Char# -> ST s () freeze_ps_array :: MutableByteArray s Int -> Int# -> ST s (ByteArray Int) new_ps_array size = ST $ \ s -> +#if __GLASGOW_HASKELL__ < 400 case (newCharArray# size s) of { StateAndMutableByteArray# s2# barr# -> STret s2# (MutableByteArray bot barr#) } +#else + case (newCharArray# size s) of { (# s2#, barr# #) -> + (# s2#, MutableByteArray bot barr# #) } +#endif where bot = error "new_ps_array" write_ps_array (MutableByteArray _ barr#) n ch = ST $ \ s# -> case writeCharArray# barr# n ch s# of { s2# -> +#if __GLASGOW_HASKELL__ < 400 STret s2# () } +#else + (# s2#, () #) } +#endif -- same as unsafeFreezeByteArray freeze_ps_array (MutableByteArray _ arr#) len# = ST $ \ s# -> +#if __GLASGOW_HASKELL__ < 400 case unsafeFreezeByteArray# arr# s# of { StateAndByteArray# s2# frozen# -> STret s2# (ByteArray (0,I# len#) frozen#) } +#else + case unsafeFreezeByteArray# arr# s# of { (# s2#, frozen# #) -> + (# s2#, ByteArray (0,I# len#) frozen# #) } +#endif \end{code} @@ -198,9 +225,6 @@ eqCharStrPrefix a1# a2# len# = unsafePerformIO ( _ccall_ strncmp (A# a1#) (A# a2#) (I# len#) >>= \ (I# x#) -> return (x# ==# 0#)) - where - bottom :: (Int,Int) - bottom = error "eqStrPrefix" eqStrPrefixBA :: ByteArray# -> ByteArray# -> Int# -> Int# -> Bool eqStrPrefixBA b1# b2# start# len# = @@ -241,14 +265,3 @@ eqStrPrefixFO fo# barr# start# len# = bottom :: (Int,Int) bottom = error "eqStrPrefixFO" \end{code} - -\begin{code} -byteArrayToString :: ByteArray Int -> String -byteArrayToString = unpackCStringBA -\end{code} - - -\begin{code} -stringToByteArray :: String -> (ByteArray Int) -stringToByteArray = packString -\end{code}