Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

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

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

commit 458ee4fe496bf55a827900fe5fd1498dadfb8fb1
Author: Simon Marlow <marlo...@gmail.com>
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>
 



_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to