[project @ 2001-02-07 12:54:09 by sewardj]
authorsewardj <unknown>
Wed, 7 Feb 2001 12:54:09 +0000 (12:54 +0000)
committersewardj <unknown>
Wed, 7 Feb 2001 12:54:09 +0000 (12:54 +0000)
Try and fix the freeStringBuffer nightmare once and for all.

ghc/compiler/main/HscMain.lhs
ghc/compiler/utils/StringBuffer.lhs

index 089e8b6..6bb6d6f 100644 (file)
@@ -15,7 +15,6 @@ module HscMain ( HscResult(..), hscMain,
 #ifdef GHCI
 import RdrHsSyn                ( RdrNameHsExpr )
 import Rename          ( renameExpr )
-import StringBuffer    ( stringToStringBuffer, freeStringBuffer )
 import Unique          ( Uniquable(..) )
 import Type            ( Type, splitTyConApp_maybe )
 import PrelNames       ( ioTyConKey )
@@ -24,7 +23,8 @@ import ByteCodeGen    ( byteCodeGen )
 
 import HsSyn
 
-import StringBuffer    ( hGetStringBuffer )
+import StringBuffer    ( hGetStringBuffer, 
+                          stringToStringBuffer, freeStringBuffer )
 import Parser
 import Lex             ( PState(..), ParseResult(..) )
 import SrcLoc          ( mkSrcLoc )
@@ -296,7 +296,7 @@ myParseModule dflags src_filename
                                   loc = mkSrcLoc (_PK_ src_filename) 1 } of {
 
        PFailed err -> do { hPutStrLn stderr (showSDoc err);
---     Not yet implemented in <4.11                freeStringBuffer buf;
+                            freeStringBuffer buf;
                             return Nothing };
 
        POk _ rdr_module@(HsModule mod_name _ _ _ _ _ _) -> do {
index f95f7a1..713dc77 100644 (file)
@@ -13,10 +13,8 @@ module StringBuffer
 
         -- creation/destruction
         hGetStringBuffer,     -- :: FilePath     -> IO StringBuffer
-#ifdef GHCI
        stringToStringBuffer, -- :: String       -> IO StringBuffer
        freeStringBuffer,     -- :: StringBuffer -> IO ()
-#endif
 
          -- Lookup
        currentChar,      -- :: StringBuffer -> Char
@@ -77,6 +75,7 @@ import Addr           ( Addr(..) )
 #endif
 import Foreign
 import Char            ( chr )
+import Panic           ( panic )
 
 -- urk!
 #include "../lib/std/cbits/stgerror.h"
@@ -195,8 +194,10 @@ unsafeWriteBuffer s@(StringBuffer a _ _ _) i# ch# =
 -- Turn a String into a StringBuffer
 
 \begin{code}
-#ifdef GHCI
 stringToStringBuffer :: String -> IO StringBuffer
+freeStringBuffer :: StringBuffer -> IO ()
+
+#if __GLASGOW_HASKELL__ >= 411
 stringToStringBuffer str =
   do let sz@(I# sz#) = length str + 1
      (Ptr a#) <- mallocBytes sz
@@ -209,9 +210,12 @@ stringToStringBuffer str =
     writeCharOffAddr a 0 c 
     fill_in cs (a `plusAddr` 1)
 
-freeStringBuffer :: StringBuffer -> IO ()
 freeStringBuffer (StringBuffer a# _ _ _) = Foreign.free (Ptr a#)
+#else
+stringToStringBuffer = panic "stringToStringBuffer: not implemented"
+freeStringBuffer sb  = return ()
 #endif
+
 \end{code}
 
 -----------------------------------------------------------------------------