[project @ 1997-10-08 18:14:23 by sof]
[ghc-hetmet.git] / ghc / lib / required / IO.lhs
index 3d4bb2f..407e261 100644 (file)
@@ -34,10 +34,11 @@ module IO (
 
 import Ix
 import STBase
+import UnsafeST                ( unsafePerformPrimIO, unsafeInterleavePrimIO )
 import IOBase
 import ArrBase         ( MutableByteArray(..), newCharArray )
 import IOHandle                -- much of the real stuff is in here
-import PackedString    ( nilPS, packCBytesST, unpackPS )
+import PackBase                ( unpackNBytesST )
 import PrelBase
 import GHC
 import Foreign          ( ForeignObj, Addr, makeForeignObj, writeForeignObj )
@@ -117,6 +118,10 @@ instance Eq Handle where
 
 instance Show Handle where {showsPrec p h = showString "<<Handle>>"}
 
+--Type declared in IOHandle, instance here because it depends on Eq.Handle
+instance Eq HandlePosn where
+    (HandlePosn h1 p1) == (HandlePosn h2 p2) = p1==p2 && h1==h2
+
 \end{code}
 
 %*********************************************************
@@ -333,23 +338,23 @@ lazyReadBlock handle =
       SemiClosedHandle fp (buf, size) ->
          _ccall_ readBlock buf fp size             >>= \ bytes ->
          (if bytes <= 0
-         then return nilPS
-         else packCBytesST bytes buf)              >>= \ some ->
+         then return ""
+         else unpackNBytesST buf bytes)            >>= \ some ->
           if bytes < 0 then
               _ccall_ free buf                     >>= \ () ->
               _ccall_ closeFile fp                 >>
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
              writeForeignObj fp ``NULL''           >>
              ioToST (writeHandle handle (SemiClosedHandle fp (``NULL'', 0))) >>
 #else
              ioToST (writeHandle handle (SemiClosedHandle ``NULL'' (``NULL'', 0))) >>
 #endif
-             returnPrimIO (unpackPS some)
+             returnPrimIO some
          else
              ioToST (writeHandle handle htype)     >>
               unsafeInterleavePrimIO (lazyReadBlock handle)
                                                    >>= \ more ->
-             returnPrimIO (unpackPS some ++ more)
+             returnPrimIO (some ++ more)
 
 lazyReadLine handle =
     ioToST (readHandle handle)                      >>= \ htype ->
@@ -361,23 +366,23 @@ lazyReadLine handle =
       SemiClosedHandle fp (buf, size) ->
          _ccall_ readLine buf fp size              >>= \ bytes ->
          (if bytes <= 0
-         then return nilPS
-         else packCBytesST bytes buf)              >>= \ some ->
+         then return ""
+         else unpackNBytesST buf bytes)            >>= \ some ->
           if bytes < 0 then
               _ccall_ free buf                     >>= \ () ->
               _ccall_ closeFile fp                 >>
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
              writeForeignObj fp ``NULL''           >>
              ioToST (writeHandle handle (SemiClosedHandle fp (``NULL'', 0))) >>
 #else
              ioToST (writeHandle handle (SemiClosedHandle ``NULL'' (``NULL'', 0))) >>
 #endif
-             returnPrimIO (unpackPS some)
+             return some
          else
              ioToST (writeHandle handle htype)     >>
               unsafeInterleavePrimIO (lazyReadLine handle)
                                                    >>= \ more ->
-             returnPrimIO (unpackPS some ++ more)
+             return (some ++ more)
 
 lazyReadChar handle =
     ioToST (readHandle handle)                      >>= \ htype ->
@@ -390,7 +395,7 @@ lazyReadChar handle =
          _ccall_ readChar fp                       >>= \ char ->
           if char == ``EOF'' then
               _ccall_ closeFile fp                 >>
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
              writeForeignObj fp ``NULL''           >>
              ioToST (writeHandle handle (SemiClosedHandle fp (``NULL'', 0))) >>
 #else
@@ -493,14 +498,14 @@ hPutStr handle str =
           else
               constructErrorAndFail "hPutStr"
   where
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
     writeLines :: ForeignObj -> String -> PrimIO Bool
 #else
     writeLines :: Addr -> String -> PrimIO Bool
 #endif
     writeLines = writeChunks ``BUFSIZ'' True 
 
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
     writeBlocks :: ForeignObj -> Int -> String -> PrimIO Bool
 #else
     writeBlocks :: Addr -> Int -> String -> PrimIO Bool
@@ -519,7 +524,7 @@ hPutStr handle str =
       a whole lot quicker. -- SOF 3/96
     -}
 
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
     writeChunks :: Int -> Bool -> ForeignObj -> String -> PrimIO Bool
 #else
     writeChunks :: Int -> Bool -> Addr -> String -> PrimIO Bool
@@ -557,7 +562,7 @@ hPutStr handle str =
      in
      shoveString 0# s
 
-#ifndef PAR
+#ifndef __PARALLEL_HASKELL__
     writeChars :: ForeignObj -> String -> PrimIO Bool
 #else
     writeChars :: Addr -> String -> PrimIO Bool