[commit: ghc] master: Add -fghci-hist-size=N to set the number of previous steps stored by :trace (458ee4f)

Simon Marlow <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/458ee4fe496bf55a827900fe5fd1498dadfb8fb1

>---------------------------------------------------------------

commit 458ee4fe496bf55a827900fe5fd1498dadfb8fb1
Author: Simon Marlow <[email protected]>
Date:   Thu Nov 1 08:51:12 2012 +0000

    Add -fghci-hist-size=N to set the number of previous steps stored by :trace

>---------------------------------------------------------------

 compiler/main/DynFlags.hs        |    6 ++++++
 compiler/main/InteractiveEval.hs |   10 ++++++----
 docs/users_guide/flags.xml       |    6 ++++++
 docs/users_guide/ghci.xml        |   13 +++++++------
 4 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index d745cd6..4810ce8 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -670,6 +670,8 @@ data DynFlags = DynFlags {
 
   maxWorkerArgs         :: Int,
 
+  ghciHistSize          :: Int,
+
   -- | MsgDoc output action: use "ErrUtils" instead of this if you can
   log_action            :: LogAction,
   flushOut              :: FlushOut,
@@ -1227,6 +1229,8 @@ defaultDynFlags mySettings =
 
         maxWorkerArgs = 10,
 
+        ghciHistSize = 50, -- keep a log of length 50 by default
+
         log_action = defaultLogAction,
         flushOut = defaultFlushOut,
         flushErr = defaultFlushErr,
@@ -2126,6 +2130,8 @@ dynamic_flags = [
 
   , Flag "fmax-worker-args" (intSuffix (\n d -> d {maxWorkerArgs = n}))
 
+  , Flag "fghci-hist-size" (intSuffix (\n d -> d {ghciHistSize = n}))
+
         ------ Profiling ----------------------------------------------------
 
         -- OLD profiling flags
diff --git a/compiler/main/InteractiveEval.hs b/compiler/main/InteractiveEval.hs
index 64b2d33..9b9c14b 100644
--- a/compiler/main/InteractiveEval.hs
+++ b/compiler/main/InteractiveEval.hs
@@ -220,13 +220,15 @@ runStmtWithLocation source linenumber expr step =
         let ic = hsc_IC hsc_env
             bindings = (ic_tythings ic, ic_rn_gbl_env ic)
 
+            size = ghciHistSize idflags'
+
         case step of
           RunAndLogSteps ->
               traceRunStatus expr bindings tyThings
-                             breakMVar statusMVar status emptyHistory
+                             breakMVar statusMVar status (emptyHistory size)
           _other ->
               handleRunStatus expr bindings tyThings
-                               breakMVar statusMVar status emptyHistory
+                               breakMVar statusMVar status (emptyHistory size)
 
 runDecls :: GhcMonad m => String -> m [Name]
 runDecls = runDeclsWithLocation "<interactive>" 1
@@ -268,8 +270,8 @@ withVirtualCWD m = do
 parseImportDecl :: GhcMonad m => String -> m (ImportDecl RdrName)
 parseImportDecl expr = withSession $ \hsc_env -> liftIO $ hscImport hsc_env expr
 
-emptyHistory :: BoundedList History
-emptyHistory = nilBL 50 -- keep a log of length 50
+emptyHistory :: Int -> BoundedList History
+emptyHistory size = nilBL size
 
 handleRunStatus :: GhcMonad m =>
                    String-> ([TyThing],GlobalRdrEnv) -> [Id]
diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml
index d670cb9..bc1c228 100644
--- a/docs/users_guide/flags.xml
+++ b/docs/users_guide/flags.xml
@@ -511,6 +511,12 @@
             <entry><option>-fno-break-on-error</option></entry>
           </row>
           <row>
+            <entry><option>-fghci-hist-size=<replaceable>n</replaceable></option></entry>
+            <entry><link linkend="ghci-debugger">Set the number of entries GHCi keeps for <literal>:history</literal></link></entry>
+            <entry>dynamic</entry>
+            <entry><option>(default is 50)</option></entry>
+          </row>
+          <row>
             <entry><option>-fprint-evld-with-show</option></entry>
             <entry><link linkend="breakpoints">Enable usage of Show instances in <literal>:print</literal></link></entry>
             <entry>dynamic</entry>
diff --git a/docs/users_guide/ghci.xml b/docs/users_guide/ghci.xml
index 3d1aecc..c59f4b3 100644
--- a/docs/users_guide/ghci.xml
+++ b/docs/users_guide/ghci.xml
@@ -1715,8 +1715,7 @@ a :: a
       <para>The history is only available when
         using <literal>:trace</literal>; the reason for this is we found that
         logging each breakpoint in the history cuts performance by a factor of
-        2 or more.  GHCi remembers the last 50 steps in the history (perhaps in
-        the future we'll make this configurable).</para>
+        2 or more.  By default, GHCi remembers the last 50 steps in the history, but this can be changed with the <option>-fghci-hist-size=<replaceable>n</replaceable></option><indexterm><primary><option>&ndash;fghci-hist-size</option></primary></indexterm> option).</para>
     </sect2>
 
     <sect2 id="ghci-debugger-exceptions">
@@ -2381,10 +2380,12 @@ Prelude> :. cmds.ghci
           <indexterm><primary><literal>:history</literal></primary></indexterm>
         </term>
 	<listitem>
-	  <para>Display the history of evaluation steps.  With a number,
-            displays that many steps (default: 20).  For use with
-            <literal>:trace</literal>; see <xref
-              linkend="tracing" />.</para>
+	  <para>Display the history of evaluation steps.  With a
+	  number, displays that many steps (default: 20).  For use
+	  with <literal>:trace</literal>; see <xref linkend="tracing"
+	  />.  To set the number of history entries stored by GHCi,
+	  use
+	  <option>-fghci-hist-size=<replaceable>n</replaceable></option>.</para>
 	</listitem>
       </varlistentry>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.