projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2000-04-14 16:17:49 by rrt]
[ghc-hetmet.git]
/
ghc
/
compiler
/
utils
/
StringBuffer.lhs
diff --git
a/ghc/compiler/utils/StringBuffer.lhs
b/ghc/compiler/utils/StringBuffer.lhs
index
da2a340
..
fd4e21e
100644
(file)
--- a/
ghc/compiler/utils/StringBuffer.lhs
+++ b/
ghc/compiler/utils/StringBuffer.lhs
@@
-66,16
+66,20
@@
module StringBuffer
#include "HsVersions.h"
import GlaExts
#include "HsVersions.h"
import GlaExts
-import Addr ( Addr(..) )
+import PrelAddr ( Addr(..) )
import Foreign
import ST
import Char ( chr )
-- urk!
import Foreign
import ST
import Char ( chr )
-- urk!
-#include "../lib/std/cbits/error.h"
+#include "../lib/std/cbits/stgerror.h"
#if __GLASGOW_HASKELL__ >= 303
#if __GLASGOW_HASKELL__ >= 303
-import IO ( openFile, slurpFile )
+import IO ( openFile
+#if __GLASGOW_HASKELL__ < 407
+ , slurpFile -- comes from PrelHandle or IOExts now
+#endif
+ )
import PrelIOBase
import PrelHandle
import Addr
import PrelIOBase
import PrelHandle
import Addr
@@
-85,7
+89,8
@@
import Addr
#endif
#if __GLASGOW_HASKELL__ < 301
#endif
#if __GLASGOW_HASKELL__ < 301
-import IOBase ( IOError(..), IOErrorType(..) )
+import IOBase ( Handle, IOError(..), IOErrorType(..),
+ constructErrorAndFail )
import IOHandle ( readHandle, writeHandle, filePtr )
import PackBase ( unpackCStringBA )
#else
import IOHandle ( readHandle, writeHandle, filePtr )
import PackBase ( unpackCStringBA )
#else
@@
-118,7
+123,7
@@
data StringBuffer
\end{code}
\begin{code}
\end{code}
\begin{code}
-instance Text StringBuffer where
+instance Show StringBuffer where
showsPrec _ s = showString ""
\end{code}
showsPrec _ s = showString ""
\end{code}
@@
-182,7
+187,6
@@
expanded tabs, and enlarge it if necessary.
\begin{code}
#if __GLASGOW_HASKELL__ < 303
\begin{code}
#if __GLASGOW_HASKELL__ < 303
-ioError = fail
mayBlock fo thing = thing
writeCharOffAddr :: Addr -> Int -> Char -> IO ()
mayBlock fo thing = thing
writeCharOffAddr :: Addr -> Int -> Char -> IO ()
@@
-203,7
+207,7
@@
slurpFileExpandTabs fname = do
(\ handle ->
do sz <- hFileSize handle
if sz > toInteger (maxBound::Int)
(\ handle ->
do sz <- hFileSize handle
if sz > toInteger (maxBound::Int)
- then ioError (userError "slurpFile: file too big")
+ then IOERROR (userError "slurpFile: file too big")
else do
let sz_i = fromInteger sz
sz_i' = (sz_i * 12) `div` 10 -- add 20% for tabs
else do
let sz_i = fromInteger sz
sz_i' = (sz_i * 12) `div` 10 -- add 20% for tabs
@@
-213,7
+217,10
@@
slurpFileExpandTabs fname = do
trySlurp :: Handle -> Int -> Addr -> IO (Addr, Int)
trySlurp handle sz_i chunk =
trySlurp :: Handle -> Int -> Addr -> IO (Addr, Int)
trySlurp handle sz_i chunk =
-#if __GLASGOW_HASKELL__ >= 303
+#if __GLASGOW_HASKELL__ == 303
+ wantReadableHandle "hGetChar" handle >>= \ handle_ ->
+ let fo = haFO__ handle_ in
+#elif __GLASGOW_HASKELL__ > 303
wantReadableHandle "hGetChar" handle $ \ handle_ ->
let fo = haFO__ handle_ in
#else
wantReadableHandle "hGetChar" handle $ \ handle_ ->
let fo = haFO__ handle_ in
#else
@@
-277,10
+284,10
@@
reAllocMem :: Addr -> Int -> IO Addr
reAllocMem ptr sz = do
chunk <- _ccall_ realloc ptr sz
if chunk == nullAddr
reAllocMem ptr sz = do
chunk <- _ccall_ realloc ptr sz
if chunk == nullAddr
-#if __GLASGOW_HASKELL__ < 303
- then fail (userError "reAllocMem")
-#else
+#if __GLASGOW_HASKELL__ >= 400
then fail "reAllocMem"
then fail "reAllocMem"
+#else
+ then fail (userError "reAllocMem")
#endif
else return chunk
#endif
else return chunk
@@
-412,16
+419,16
@@
scanNumLit acc (StringBuffer fo l# s# c#) =
| otherwise -> (acc,StringBuffer fo l# s# c#)
| otherwise -> (acc,StringBuffer fo l# s# c#)
-expandUntilMatch :: StringBuffer -> String -> StringBuffer
+expandUntilMatch :: StringBuffer -> String -> Maybe StringBuffer
expandUntilMatch (StringBuffer fo l# s# c#) str =
loop c# str
where
expandUntilMatch (StringBuffer fo l# s# c#) str =
loop c# str
where
- loop c# [] = StringBuffer fo l# s# c#
- loop c# ((C# x#):xs)
- | indexCharOffAddr# fo c# `eqChar#` x#
- = loop (c# +# 1#) xs
- | otherwise
- = loop (c# +# 1#) str
+ loop c# [] = Just (StringBuffer fo l# s# c#)
+ loop c# ((C# x#):xs) =
+ case indexCharOffAddr# fo c# of
+ ch# | ch# `eqChar#` '\NUL'# && c# >=# l# -> Nothing
+ | ch# `eqChar#` x# -> loop (c# +# 1#) xs
+ | otherwise -> loop (c# +# 1#) str
\end{code}
\end{code}
@@
-497,7
+504,7
@@
lexemeToString (StringBuffer fo _ start_pos# current#) =
else
unpackCStringBA (copySubStr (A# fo) (I# start_pos#) (I# (current# -# start_pos#)))
else
unpackCStringBA (copySubStr (A# fo) (I# start_pos#) (I# (current# -# start_pos#)))
-lexemeToByteArray :: StringBuffer -> _ByteArray Int
+lexemeToByteArray :: StringBuffer -> ByteArray Int
lexemeToByteArray (StringBuffer fo _ start_pos# current#) =
if start_pos# ==# current# then
error "lexemeToByteArray"
lexemeToByteArray (StringBuffer fo _ start_pos# current#) =
if start_pos# ==# current# then
error "lexemeToByteArray"