summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-11-01 08:51:12 +0000
committerSimon Marlow <marlowsd@gmail.com>2012-11-01 10:13:18 +0000
commit458ee4fe496bf55a827900fe5fd1498dadfb8fb1 (patch)
treedae7d117c0d2fe833f68ea4069573a3c9df4fcda
parent3a6b1bfb08602a8193b0025f0fe47ec8ddf8dad2 (diff)
downloadhaskell-458ee4fe496bf55a827900fe5fd1498dadfb8fb1.tar.gz
Add -fghci-hist-size=N to set the number of previous steps stored by :trace
-rw-r--r--compiler/main/DynFlags.hs6
-rw-r--r--compiler/main/InteractiveEval.hs10
-rw-r--r--docs/users_guide/flags.xml6
-rw-r--r--docs/users_guide/ghci.xml13
4 files changed, 25 insertions, 10 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index d745cd63af..4810ce85b1 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 64b2d3303c..9b9c14bb0b 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 d670cb91a9..bc1c228e36 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 3d1aecc2fb..c59f4b3830 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>