Tidy up Outputable.printDoc, and add printDoc_
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 17 Jan 2014 10:40:58 +0000 (10:40 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 17 Jan 2014 14:06:26 +0000 (14:06 +0000)
The former adds a newline at the end (restoring the previous behaviour)
while the latter does not (which previously happened by turning the
thuing into a string and only then printing it).

compiler/main/DynFlags.hs
compiler/utils/Pretty.lhs
testsuite/tests/ghci.debugger/scripts/dynbrk009.stdout

index 35e9c7e..36f453f 100644 (file)
@@ -1485,13 +1485,16 @@ defaultLogAction dflags severity srcSpan style msg
           putStrSDoc = defaultLogActionHPutStrDoc dflags stdout
 
 defaultLogActionHPrintDoc :: DynFlags -> Handle -> SDoc -> PprStyle -> IO ()
-defaultLogActionHPrintDoc = defaultLogActionHPutStrDoc
+defaultLogActionHPrintDoc dflags h d sty
+ = defaultLogActionHPutStrDoc dflags h (d $$ text "") sty
+      -- Adds a newline
 
 defaultLogActionHPutStrDoc :: DynFlags -> Handle -> SDoc -> PprStyle -> IO ()
 defaultLogActionHPutStrDoc dflags h d sty
-    = Pretty.printDoc Pretty.PageMode (pprCols dflags) h doc
-    where
-      doc = runSDoc d (initSDocContext dflags sty)
+  = Pretty.printDoc_ Pretty.PageMode (pprCols dflags) h doc
+  where   -- Don't add a newline at the end, so that successive
+          -- calls to this log-action can output all on the same line
+    doc = runSDoc d (initSDocContext dflags sty)
 
 newtype FlushOut = FlushOut (IO ())
 
index 0bac66e..fb7fe2b 100644 (file)
@@ -173,7 +173,7 @@ module Pretty (
 
         hang, punctuate,
 
-        fullRender, printDoc, showDoc,
+        fullRender, printDoc, printDoc_, showDoc,
         bufLeftRender -- performance hack
   ) where
 
@@ -985,9 +985,16 @@ spaces n | n <=# _ILIT(0) = ""
 
 \begin{code}
 printDoc :: Mode -> Int -> Handle -> Doc -> IO ()
-printDoc LeftMode _ hdl doc
+-- printDoc adds a newline to the end
+printDoc mode cols hdl doc = printDoc_ mode cols hdl (doc $$ text "")
+
+printDoc_ :: Mode -> Int -> Handle -> Doc -> IO ()
+-- printDoc_ does not add a newline at the end, so that
+-- successive calls can output stuff on the same line
+-- Rather like putStr vs putStrLn
+printDoc_ LeftMode _ hdl doc
   = do { printLeftRender hdl doc; hFlush hdl }
-printDoc mode pprCols hdl doc
+printDoc_ mode pprCols hdl doc
   = do { fullRender mode pprCols 1.5 put done doc ;
          hFlush hdl }
   where
@@ -999,7 +1006,7 @@ printDoc mode pprCols hdl doc
     put (ZStr s) next = hPutFZS  hdl s >> next
     put (LStr s l) next = hPutLitString hdl s l >> next
 
-    done = hPutChar hdl '\n'
+    done = return () -- hPutChar hdl '\n'
 
   -- some versions of hPutBuf will barf if the length is zero
 hPutLitString :: Handle -> Ptr a -> Int# -> IO ()
index f774e1e..65ab5e6 100644 (file)
@@ -3,9 +3,6 @@ _result :: Int = _
 Stopped at dynbrk009.hs:8:27-36
 _result :: Int = _
 Stopped at dynbrk009.hs:8:31-35
-
 Stopped at dynbrk009.hs:6:1-9
-
 Stopped at dynbrk009.hs:6:9
-
 3