From 13e40372870b3a36a3851e4a0f9a5b0f32f31148 Mon Sep 17 00:00:00 2001 From: simonmar Date: Mon, 21 May 2001 14:03:05 +0000 Subject: [PATCH] [project @ 2001-05-21 14:03:05 by simonmar] - remove support for GHC < 4.00 - fixed to work with GHC 5.01 (new I/O system) --- ghc/compiler/utils/StringBuffer.lhs | 115 +++-------------------------------- 1 file changed, 10 insertions(+), 105 deletions(-) diff --git a/ghc/compiler/utils/StringBuffer.lhs b/ghc/compiler/utils/StringBuffer.lhs index 2f0d532..57ff9f4 100644 --- a/ghc/compiler/utils/StringBuffer.lhs +++ b/ghc/compiler/utils/StringBuffer.lhs @@ -77,54 +77,27 @@ import Foreign import Char ( chr ) import Panic ( panic ) -#if __GLASGOW_HASKELL__ >= 303 -import IO ( openFile -#if __GLASGOW_HASKELL__ < 407 - , slurpFile -- comes from PrelHandle or IOExts now -#endif - ) +import IO ( openFile ) +import IOExts ( slurpFile ) import PrelIOBase import PrelHandle -#if __GLASGOW_HASKELL__ >= 501 -import IOExts ( slurpFile ) -#endif -import Addr -#else -import IO ( openFile, hFileSize, hClose, IOMode(..) ) import Addr -#endif #if __GLASGOW_HASKELL__ >= 411 import Ptr ( Ptr(..) ) #endif -#if __GLASGOW_HASKELL__ < 301 -import IOBase ( Handle, IOError(..), IOErrorType(..), - constructErrorAndFail ) -import IOHandle ( readHandle, writeHandle, filePtr ) -import PackBase ( unpackCStringBA ) -#else -# if __GLASGOW_HASKELL__ <= 302 -import PrelIOBase ( Handle, IOError(..), IOErrorType(..), - constructErrorAndFail ) -import PrelHandle ( readHandle, writeHandle, filePtr ) -# endif import PrelPack ( unpackCStringBA ) -#endif + #if __GLASGOW_HASKELL__ >= 501 import PrelIO ( hGetcBuffered ) import PrelCError ( throwErrnoIfMinus1RetryMayBlock ) import PrelConc ( threadWaitRead ) #endif -#if __GLASGOW_HASKELL__ < 402 -import Util ( bracket ) -#else import Exception ( bracket ) -#endif - import PrimPacked import FastString -import Char (isDigit) +import Char ( isDigit ) \end{code} \begin{code} @@ -160,33 +133,6 @@ hGetStringBuffer expand_tabs fname = do _casm_ `` ((char *)%0)[(int)%1]=(char)0; '' (A# a#) (I# (read# -# 1#)) return (StringBuffer a# read# 0# 0#) -#if __GLASGOW_HASKELL__ < 303 -slurpFile fname = - openFile fname ReadMode >>= \ hndl -> - hFileSize hndl >>= \ len -> - let len_i = fromInteger len in - -- Allocate an array for system call to store its bytes into. - -- ToDo: make it robust --- trace (show ((len_i::Int)+1)) $ - _casm_ `` %r=(char *)malloc(sizeof(char)*(int)%0); '' (len_i::Int) >>= \ arr@(A# a#) -> - if addr2Int# a# ==# 0# then - fail (userError ("hGetStringBuffer: Could not allocate "++show len_i ++ " bytes")) - else - readHandle hndl >>= \ hndl_ -> - writeHandle hndl hndl_ >> - let ptr = filePtr hndl_ in -#if __GLASGOW_HASKELL__ <= 302 - _ccall_ fread arr (1::Int) len_i (ptr::ForeignObj) >>= \ (I# read#) -> -#else - _ccall_ fread arr (1::Int) len_i (ptr::Addr) >>= \ (I# read#) -> -#endif - hClose hndl >> - if read# ==# 0# then -- EOF or some other error - fail (userError ("hGetStringBuffer: failed to slurp in interface file "++fname)) - else - return (arr, I# read#) -#endif - unsafeWriteBuffer :: StringBuffer -> Int# -> Char# -> StringBuffer unsafeWriteBuffer s@(StringBuffer a _ _ _) i# ch# = unsafePerformIO ( @@ -234,20 +180,8 @@ We guess the size of the buffer required as 20% extra for expanded tabs, and enlarge it if necessary. \begin{code} -#if __GLASGOW_HASKELL__ < 303 -mayBlock fo thing = thing - -writeCharOffAddr :: Addr -> Int -> Char -> IO () -writeCharOffAddr addr off c - = _casm_ ``*((char *)%0+(int)%1)=(char)%2;'' addr off c -#endif - getErrType :: IO Int -#if __GLASGOW_HASKELL__ < 303 -getErrType = _casm_ ``%r = ghc_errtype;'' -#else getErrType = _ccall_ getErrType__ -#endif slurpFileExpandTabs :: FilePath -> IO (Addr,Int) slurpFileExpandTabs fname = do @@ -265,19 +199,12 @@ slurpFileExpandTabs fname = do trySlurp :: Handle -> Int -> Addr -> IO (Addr, Int) trySlurp handle sz_i chunk = -#if __GLASGOW_HASKELL__ < 303 - readHandle handle >>= \ handle_ -> - let fo = filePtr handle_ in -#elif __GLASGOW_HASKELL__ == 303 - wantReadableHandle "hGetChar" handle >>= \ handle_ -> - let fo = haFO__ handle_ in -#elif __GLASGOW_HASKELL__ < 501 +#if __GLASGOW_HASKELL__ < 501 wantReadableHandle "hGetChar" handle $ \ handle_ -> let fo = haFO__ handle_ in #else - wantReadableHandle "hGetChar" handle $ \handle_ -> - let fd = haFD handle_ - ref = haBuffer handle_ in + wantReadableHandle "hGetChar" handle $ + \ handle_@Handle__{ haFD=fd, haBuffer=ref, haBufferMode=mode } -> #endif let (I# chunk_sz) = sz_i @@ -306,24 +233,8 @@ trySlurp handle sz_i chunk = buf <- readIORef ref ch <- (if not (bufferEmpty buf) then hGetcBuffered fd ref buf - else -- buffer is empty. - case haBufferMode handle_ of - LineBuffering -> do - new_buf <- fillReadBuffer fd True buf - hGetcBuffered fd ref new_buf - BlockBuffering _ -> do - new_buf <- fillReadBuffer fd False buf - hGetcBuffered fd ref new_buf - NoBuffering -> do - -- make use of the minimal buffer we already have - let raw = bufBuf buf - r <- throwErrnoIfMinus1RetryMayBlock "hGetChar" - (read_off (fromIntegral fd) raw 0 1) - (threadWaitRead fd) - if r == 0 - then ioe_EOF - else do (c,_) <- readCharFromBuffer raw 0 - return c) + else do new_buf <- fillReadBuffer fd True buf + hGetcBuffered fd ref new_buf) `catch` \e -> if isEOFError e then return '\xFFFF' else ioError e @@ -363,20 +274,14 @@ reAllocMem :: Addr -> Int -> IO Addr reAllocMem ptr sz = do chunk <- _ccall_ realloc ptr sz if chunk == nullAddr -#if __GLASGOW_HASKELL__ >= 400 then fail "reAllocMem" -#else - then fail (userError "reAllocMem") -#endif else return chunk allocMem :: Int -> IO Addr allocMem sz = do chunk <- _ccall_ malloc sz if chunk == nullAddr -#if __GLASGOW_HASKELL__ < 303 - then fail (userError "allocMem") -#elif __GLASGOW_HASKELL__ < 501 +#if __GLASGOW_HASKELL__ < 501 then constructErrorAndFail "allocMem" #else then ioException (IOError Nothing ResourceExhausted "malloc" -- 1.7.10.4