X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Futils%2FPrimPacked.lhs;h=153ff5d3034e723e0da8208a15f3290339f04201;hb=438596897ebbe25a07e1c82085cfbc5bdb00f09e;hp=10216452f639dcb9c9825f9f06862a783c3704b9;hpb=9dd6e1c216993624a2cd74b62ca0f0569c02c26b;p=ghc-hetmet.git diff --git a/ghc/compiler/utils/PrimPacked.lhs b/ghc/compiler/utils/PrimPacked.lhs index 1021645..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} @@ -22,8 +22,7 @@ module PrimPacked eqCharStrPrefixBA, -- :: Addr# -> ByteArray# -> Int# -> Int# -> Bool eqStrPrefixFO, -- :: ForeignObj# -> ByteArray# -> Int# -> Int# -> Bool - addrOffset#, -- :: Addr# -> Int# -> Addr# - indexCharOffFO# -- :: ForeignObj# -> Int# -> Char# + addrOffset# -- :: Addr# -> Int# -> Addr# ) where -- This #define suppresses the "import FastString" that @@ -33,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: @@ -122,21 +134,10 @@ copySubStrFO (ForeignObj fo) (I# start#) len@(I# length#) = = write_ps_array arr_in# idx (chr# 0#) `seqStrictlyST` returnStrictlyST () | otherwise - = case (indexCharOffFO# fo (idx +# start#)) of { ch -> + = case (indexCharOffForeignObj# fo (idx +# start#)) of { ch -> write_ps_array arr_in# idx ch `seqStrictlyST` fill_in arr_in# (idx +# 1#) } -{- ToDo: add FO primitives.. -} -#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ <=205 -indexCharOffFO# :: ForeignObj# -> Int# -> Char# -indexCharOffFO# fo# i# = - case unsafePerformIO (_casm_ ``%r=(char)*((char *)%0 + (int)%1); '' (ForeignObj fo#) (I# i#)) of - C# c -> c -#else -indexCharOffFO# :: ForeignObj# -> Int# -> Char# -indexCharOffFO# fo i = indexCharOffForeignObj# fo i -#endif - -- step on (char *) pointer by x units. addrOffset# :: Addr# -> Int# -> Addr# addrOffset# a# i# = @@ -177,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} @@ -210,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# = @@ -253,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}