[project @ 2002-04-29 16:17:55 by simonmar]
authorsimonmar <unknown>
Mon, 29 Apr 2002 16:17:55 +0000 (16:17 +0000)
committersimonmar <unknown>
Mon, 29 Apr 2002 16:17:55 +0000 (16:17 +0000)
- Fix bootstrapped compilation,

- Add the following RULE:

text "abc"  ==> ptext SLIT("abc")

  so most of the time there shouldn't be any need to use SLIT().
  I'll go around and apply the opposite of the above RULE once
  I've convinced myself that the RULE does what it should.

ghc/compiler/utils/Pretty.lhs

index 6f4f614..994435a 100644 (file)
@@ -189,8 +189,21 @@ import IOExts              ( hPutBufFull )
 import System.IO       ( hPutBuf )
 #endif
 
+#if __GLASGOW_HASKELL__ < 503
+import PrelBase                ( unpackCString# )
+#else
+import GHC.Base                ( unpackCString# )
+#endif
+
 import PrimPacked      ( strLength )
 
+#if __GLASGOW_HASKELL__ < 411
+import PrelAddr                ( Addr(..) )
+#else
+import Addr            ( Addr(..) )
+import Ptr             ( Ptr(..) )
+#endif
+
 -- Don't import Util( assertPanic ) because it makes a loop in the module structure
 
 infixl 6 <> 
@@ -595,6 +608,12 @@ text  s = case length   s of {IBOX(sl) -> textBeside_ (Str s)  sl Empty}
 ftext s = case lengthFS s of {IBOX(sl) -> textBeside_ (PStr s) sl Empty}
 ptext (A# s) = case strLength (A# s) of {IBOX(sl) -> textBeside_ (LStr s sl) sl Empty}
 
+-- RULE that turns (text "abc") into (ptext (A# "abc"#)) to avoid the
+-- intermediate packing/unpacking of the string.
+{-# RULES 
+  "text/str" forall a. text (unpackCString# a) = ptext (A# a)
+ #-}
+
 nest IBOX(k)  p = mkNest k (reduceDoc p)        -- Externally callable version
 
 -- mkNest checks for Nest's invariant that it doesn't have an Empty inside it