X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Futils%2FPrimPacked.lhs;h=2578d4aba134b96f0f23940d30e15e1cfdca610d;hb=53fed288e7cd88ed972e8077a5c90e66b0c572d6;hp=10216452f639dcb9c9825f9f06862a783c3704b9;hpb=9dd6e1c216993624a2cd74b62ca0f0569c02c26b;p=ghc-hetmet.git diff --git a/ghc/compiler/utils/PrimPacked.lhs b/ghc/compiler/utils/PrimPacked.lhs index 1021645..2578d4a 100644 --- a/ghc/compiler/utils/PrimPacked.lhs +++ b/ghc/compiler/utils/PrimPacked.lhs @@ -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,23 @@ 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 ) +#else +import PrelArr ( StateAndMutableByteArray#(..), + StateAndByteArray#(..) ) +import PrelST +#endif + \end{code} Return the length of a @\\NUL@ terminated character string: @@ -122,21 +132,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# = @@ -210,9 +209,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 +249,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}