| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Prelude Data.IORef> :p l
l = (_t4::Maybe Integer) : (_t5::[Maybe Integer])
Prelude Data.IORef> p <- newIORef l
Prelude Data.IORef> :p p
p = GHC.IOBase.IORef (GHC.STRef.STRef {((_t6::Maybe Integer) :
(_t7::[Maybe Integer]))})
Prelude Data.IORef> :sp p
p = GHC.IOBase.IORef (GHC.STRef.STRef {(_ : _)})
I used braces to denote the contents of a reference.
Perhaps there is a more appropriate notation?
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
This helps to get pretty printing right,
nested newtypes were not being shown correctly by :print
|
|
|
|
|
|
| |
The flag enables the use of Show instances in :print.
By default they are not used anymore
|
| |
|
|
|
|
|
| |
The term pretty printer used by :print shouldn't output
the contents of TypeRep values, e.g. inside Dynamic values
|
|
|
|
|
| |
The term pretty printer used by :print shouldn't output
the contents of TypeRep values, e.g. inside Dynamic values
|
| |
|
| |
|
|
|
|
|
|
|
| |
Older GHCs can't parse OPTIONS_GHC.
This also changes the URL referenced for the -w options from
WorkingConventions#Warnings to CodingStyle#Warnings for the compiler
modules.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
With this patch, ghci runs rtti (bounded in the term treewith a max. depth of 10)
automatically after evaluating any expression in the interactive env.
In addition, a rtti step is performed on the local bindings in a breakpoint,
before returning control to the user
Let's see how well this works in practice
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the .hi file
Previously the behaviour was to panic.
Now it will print an approximated representation,
using the names (enclosed in keys, i.e. "<...>")
and the pointed subterms. Non pointed subterms cannot
be included in this representation:
Prelude> let se = Data.Sequence.fromList (map Just "abc")
Prelude> :eval se
()
Prelude> :p se
se = <Data.Sequence.Deep> (<Data.Sequence.One> (_t1::t)) () (<Data.Sequence.Two> (_t2::t) (_t3::t))
Prelude> :eval _t2
()
Prelude> :p se
se = <Data.Sequence.Deep> (<Data.Sequence.One> (_t4::t1)) () (<Data.Sequence.Two> (Just 'b') (_t5::t1))
Prelude>
This patch also includes some fixes in the pretty printer
for the Term datatype
|
|
|
|
| |
This does a better job of showing that obtainTerm does not alter the Session
|
| |
|
|
|
|
| |
This has been a long-standing ToDo.
|
|
|
|
|
| |
Otherwise :print only works for local identifiers, not global ones.
In fact it was silently failing, so I fixed that too.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The stack of breakpoint resume contexts is now part of the
InteractiveContext and managed by the GHC API. This prevents misuse
of the resume context by the client (e.g. resuming a breakpoint that
isn't the topmost, which would lead to a confused IC at the least).
I changed the TypeEnv in the IC to a [Id]. It only contained Ids
anyway, and this allows us to have shadowing, which removes an ugly
and annoying restriction.
The parts of the GHC API which deal with interactive evaluation are
now in a module of their own, InteractiveEval.
|
|
|
|
|
|
|
| |
This was being done already for each binding added by :print,
but :sprint does not add any new binding, so we take care of it
separately
|
|
|
|
| |
instantiated by :print
|
|
|
|
|
| |
It wasn't a good idea to disable it
|
|
|
|
|
|
|
|
|
|
|
|
| |
Stopped at ../Test3.hs:(1,0)-(2,30)
_result :: [a]
[../Test3.hs:(1,0)-(2,30)] *Main> _result
<interactive>:1:0:
Ambiguous type variable `a' in the constraint:
`Show a' arising from a use of `print' at <interactive>:1:0-6
Cannot resolve unkonwn runtime types: a
Use :print or :force to determine these types
|
|
|
|
| |
reconstruction
|
| |
|
|
|
|
|
| |
Strictly speaking most of pprintClosureCommand should be exported by
the GHC API, but this is a step in the right direction.
|
|
|
|
|
|
|
|
| |
Now, the type checker won't attempt to generalise over the skolem
variables in the interactive bindings. If we end up trying to show
one of these types, there will be an unresolved predicate 'Show t'
which causes a type error (albeit a strange one, I'll fix that
later).
|
|
|
|
| |
'_ti' in :print
|
|
|
|
| |
interactive environment
|
| |
|
|
|
|
|
|
| |
Instead, we keep the original tyvars.
The plan is to exploit type relationships among closures to recover more types.
|
|
|
|
|
|
| |
I did quite a bit of clean up in the Term pretty printer code too.
Support for infix constructors is still on the TODO list
|
|
|
|
| |
matching
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- move parts of the debugger implementation below the GHC API where
they belong. There is still more in Debugger that violates the
layering, hopefully I'll get to that later.
- instead of returning an IO action from runStmt for resuming,
return a ResumeHandle that is passed to GHC.resume.
- breakpoints now return [Name] which is displayed in the same
way as when a binding statement is executed.
- :load, :add, :reload now clear the active breakpoints and context
- :break gives a sensible error when used on a non-interpreted module
- export breakpoint-related types from GHC
- remove a bunch of layer-violating imports from InteractiveUI
- remove some more vestiges of the old breakpoint code (topLevel in
the GHCi state).
- remove TickTree and use a simple array instead, cached per module
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is the result of Bernie Pope's internship work at MSR Cambridge,
with some subsequent improvements by me. The main plan was to
(a) Reduce the overhead for breakpoints, so we could enable
the feature by default without incurrent a significant penalty
(b) Scatter more breakpoint sites throughout the code
Currently we can set a breakpoint on almost any subexpression, and the
overhead is around 1.5x slower than normal GHCi. I hope to be able to
get this down further and/or allow breakpoints to be turned off.
This patch also fixes up :print following the recent changes to
constructor info tables. (most of the :print tests now pass)
We now support single-stepping, which just enables all breakpoints.
:step <expr> executes <expr> with single-stepping turned on
:step single-steps from the current breakpoint
The mechanism is quite different to the previous implementation. We
share code with the HPC (haskell program coverage) implementation now.
The coverage pass annotates source code with "tick" locations which
are tracked by the coverage tool. In GHCi, each "tick" becomes a
potential breakpoint location.
Previously breakpoints were compiled into code that magically invoked
a nested instance of GHCi. Now, a breakpoint causes the current
thread to block and control is returned to GHCi.
See the wiki page for more details and the current ToDo list:
http://hackage.haskell.org/trac/ghc/wiki/NewGhciDebugger
|
| |
|
| |
|
|
|
|
|
| |
Test ghci.debugger/scripts/print018 covers this
|
|
|
|
|
|
|
|
|
|
|
| |
Print
"Breakpoint set at Main:26:13"
instead of
"Breakpoint set at (26,13)"
|
|
|
|
|
|
|
|
|
| |
Now the user can say
> :break add 13
at the ghci prompt and the debugger will use the first top level module as the target for the breakpoint
|
|
|
|
|
| |
Made a bit faster the test which gets done every time a running program hits a dynamic breakpoint. I moved the bounds checking inside a DEBUG pragma and replaced (IArray.!) for unsafeAt
|
| |
|
|
|
|
|
|
| |
A big motivation to start with it was getting several independently useful functions out of the Ghci monad and into the IO monad instead. Working in debugger integration for Emacs via the ghc-api is helping me to improve reusability..
While I was there, I tried to make the code less tangled, easier to understand, switched from implicit Exceptions to explicit Eithers in the bkptTable code, etc.
|